JSPM

react-adblocker-detect

1.0.5
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 12
  • Score
    100M100P100Q73001F
  • License MIT

A lightweight React component that detects if an ad blocker is active in the user's browser. It allows developers to conditionally render UI elements or trigger custom actions when ad blocking is detected, enhancing user messaging or monetization strategies.

Package Exports

  • react-adblocker-detect
  • react-adblocker-detect/dist/index.js
  • react-adblocker-detect/dist/index.mjs

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-adblocker-detect) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

📛 React Adblock Detector

A lightweight, customizable React component that detects AdBlock usage and shows a user-friendly modal with instructions to disable it. Supports persistent detection and polling behavior.

npm version package size minified JavaScript Style Guide

total downloads total downloads per year total downloads per week total downloads per month

react-adblocker-detect


📦 Installation

npm i react-adblocker-detect

yarn add react-adblocker-detect

pnpm i react-adblocker-detect

bun add react-adblocker-detect

⚙️ Demo

Access Demos at:

Demo

Demo Persistent

Demo Persistent With Polling


📸 Screenshot

Modal 1

Modal 2


✨ Features

  • Detects common adblockers
  • Beautiful modal UI with step-by-step disable instructions
  • Persistent and polling behavior options
  • Fully configurable via props
  • Written in TypeScript

🚀 Usage

For React/Vite

// app.tsx or main.tsx
import React from "react";

import { AdblockDetector } from "react-adblock-detector";

import "react-adblock-detector/dist/index.css";

const App = () => {
  return (
    <div>
      <AdblockDetector
        config={{
          persistent: true,
          pollingTime: 10000, // in milliseconds
          title: "AdBlocker Detected!",
        }}
      />
    </div>
  );
};

export default App;

For Next.js (Pages Router)

// _app.tsx
import React from "react";
import type { AppProps } from "next/app";
import { CookieConsent } from "react-consent-management-banner";

import "react-consent-management-banner/dist/index.css";

function MyApp({ Component, pageProps }: AppProps) {
  return (
    <React.Fragment>
      <Component {...pageProps} />

      <AdblockDetector
        config={{
          persistent: true,
          pollingTime: 10000, // in milliseconds
          title: "AdBlocker Detected!",
        }}
      />
    </React.Fragment>
  );
}

For Next.js App Router

// layout.tsx
import React from "react";

import { AdblockDetector } from "react-adblock-detector";

import "react-adblock-detector/dist/index.css";

export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <html>
      <body>
        {children}
        <AdblockDetector
          config={{
            persistent: true,
            pollingTime: 10000, // in milliseconds
            title: "AdBlocker Detected!",
          }}
        />
      </body>
    </html>
  );
}

⚙️ Configuration

The AdblockDetector component accepts a config prop of type Partial<IAdBlockerConfig>.

Default Config

const defaultConfig = {
  persistent: false,
  title: "AdBlocker Detected",
  howToTitle: "How to Disable the Adblocker",
  description:
    "We noticed you're using an ad blocker. Please disable it so we can keep the site running.",
  btn1Title: "How to disable adblocker",
  btn2Title: "I have disabled my adblocker",
  howToSteps: [
    {
      title: "Step 1: Click on the Extensions Icon",
      description:
        "At the top-right of your browser, click the puzzle piece icon to see all extensions.",
    },
    {
      title: "Step 2: Open AdBlock Settings",
      description:
        "Click the AdBlock or AdBlock Plus icon from the list. Then click the settings gear or options.",
    },
    {
      title: "Step 3: Pause or Whitelist",
      description: `Choose "Pause on this site" or "Don't run on this site" depending on your extension.`,
    },
    {
      title: "Step 4: Refresh the Page",
      description:
        "Reload the page to check if the content is now visible. Enjoy the experience!",
    },
  ],
  pollingTime: undefined, // in milliseconds
  initialInterval: 200, // delay before showing the modal initially
  persistSetting: true, // store detection state in localStorage
};

🪝 Hook

useAdblock(shouldDetect: boolean): boolean

A custom React hook that returns true if adblocker is detected. Used internally by AdblockDetector, but can be used separately if you need raw detection logic.


💡 Modal Behavior

  • Closeable: If persistent: false, the modal can be closed after user claims they disabled adblock.
  • Persistent: If persistent: true, the modal keeps rechecking adblock status at intervals using pollingTime.

🗃 Local Storage

This library stores a flag (rad_adblocker) in localStorage to avoid showing the modal again unnecessarily when not in persistent mode.


🧑‍🎓 Credits

Developed with ❤️ by Farasat Ali Feedback and contributions welcome!