npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

react-anti-ads

v1.1.0

Published

React component and hook to detect AdBlock

Readme

🛡️ react-anti-ads

React component & hook to detect if the user is using AdBlock.
Automatically shows a fallback UI when AdBlock is detected, without requiring a page refresh.

🔍 Support for Next.js (App Router or Pages Router), React, and any framework using React.


✨ Features

  • ✅ Detects AdBlock using DOM & script tricks
  • 🚫 Works even if AdBlock is turned on/off without refresh
  • 💡 Customizable fallback UI
  • 🔁 Auto re-checks periodically
  • ⚡ Lightweight & no dependencies
  • 🧩 Works out-of-the-box with Next.js (both app and pages directory)

📦 Installation

npm install react-anti-ads
# or
yarn add react-anti-ads

🚀 Usage

In Next.js (App Router)

"use client";

import AntiAds from "react-anti-ads";

export default function Page() {
  return (
    <AntiAds fallback={<div>🚫 AdBlock terdeteksi! Mohon nonaktifkan untuk melanjutkan.</div>}>
      <main>
        <h1>Selamat datang!</h1>
        <p>Terima kasih telah mendukung tanpa AdBlock 🙏</p>
      </main>
    </AntiAds>
  );
}

In React

import React from "react";
import AntiAds from "react-anti-ads";

function App() {
  return (
    <AntiAds>
      <h1>Selamat datang!</h1>
    </AntiAds>
  );
}

⚡ Imperative Usage with isAdBlockOn()

import { useEffect } from "react";
import { isAdBlockOn } from "react-anti-ads";

export default function MyComponent() {
  useEffect(() => {
    isAdBlockOn().then((detected) => {
      if (detected) {
        console.log("AdBlock is active!");
        // You can show a modal, redirect, etc.
      }
    });
  }, []);

  return <div>My page content</div>;
}

🧠 How It Works

Internally, this package uses:

  • A hidden <div> bait with class names like adsbox, banner-ad, etc.
  • A fake script request to /ads.js that usually gets blocked
  • Regular polling every 1s to re-check dynamically
  • Returns a fallback UI immediately when AdBlock is detected
  • No actual network is required.

📚 API Reference

API | Type | Description | --- | --- | --- | AntiAds | Component | Wrap your UI and show fallback if blocked | useAdBlock() | Hook | Returns { isAdBlockActive, isChecking } | isAdBlockOn() | Function | Returns Promise for detection |

Authors

📝 License

MIT License GPLv3 License AGPL License npm version downloads