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.
📦 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:
📸 Screenshot
✨ 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 usingpollingTime
.
🗃 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!