multi-adblock-detect
v1.2.1
Published
Multivalent adblock detector
Downloads
6,548
Readme
Multivalent Adblock Detector (with TypeScript + React Hook support)
This package contains several adblock detection techniques, drawn from different sources on the internet.
Effectivenss
The table below shows the effectiveness level of the several ad blocker detection techniques included here:
| Detection Technique | uBO | uB | AB | ABP | Gh. | AG | AL | PB | FA | ABU
| ----------------------------- | -- | -- | -- | -- | -- | -- | -- | -- | -- | -- |
| ...FetchOrXhrAdsByGoogle
| ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
| ...FetchDoubleClick
| ❌ | ❌ | ✅ | ✅ | ✅ | ❌ |✅ | ✅ | ❌ | ✅ |
| ...ScriptSailthruJs
| ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
| ...BaitElementOrXhrGoogle
| ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| ...ScriptAdsByGoogle
| ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| ...ScriptAdsJs
| ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
The presence of uBO and FA cannot be detected, at this time.
The various ad blockers (abbreviated above) are:
- uBO: uBlock Origin
- uB: uBlock
- AB: AdBlock
- ABP: AdBlock Plus
- Gh.: Ghostery
- AG: AdGuard
- AL: AdLock
- PB: Privacy Badger
- FA: Fair AdBlock
- ABU: AdBlock Ultimate
You can import one or multiple of these detection techniques for use in your project.
Example Usage
import {
useDetectAdBlockFetchOrXhrAdsByGoogle,
useDetectAdBlockFetchDoubleClick,
} from "multi-adblock-detect";
export const useAdBlockDetect = (): boolean =>
[
useDetectAdBlockFetchOrXhrAdsByGoogle(),
useDetectAdBlockFetchDoubleClick(),
].some(detected => detected);
Techniques
Each technique is available as a regular function, and as a React hook.
Standard JavaScript function:
detectAdBlockFetchOrXhrAdsByGoogle
- React Hook variant:
useDetectAdBlockFetchOrXhrAdsByGoogle
- React Hook variant:
Standard JavaScript function:
detectAdBlockFetchDoubleClick
- React Hook variant:
useDetectAdBlockFetchDoubleClick
- React Hook variant:
Standard JavaScript function:
detectAdBlockScriptSailthruJs
– requires a static asset- React Hook variant:
useDetectAdBlockScriptSailthruJs
- React Hook variant:
Standard JavaScript function:
detectAdBlockBaitElementOrXhrGoogle
– requires a static asset- React Hook variant:
useDetectAdBlockBaitElementOrXhrGoogle
- React Hook variant:
Standard JavaScript function:
detectAdBlockScriptAdsByGoogle
- React Hook variant:
useDetectAdBlockScriptAdsByGoogle
- React Hook variant:
Standard JavaScript function:
detectAdBlockScriptAdsJs
– requires a static asset- React Hook variant:
useDetectAdBlockScriptAdsJs
- React Hook variant:
Usage
The function variant takes a callback (of type () => void
), which gets called/triggered if an ad blocker is detected.
The custom hook contains a useState
which intially starts out as false
, and eventually updates to true
if an ad blocker (this state is returned by the custom hook).
Note: there can be false positives (i.e. false detection of an ad blocker when none is present), but it is likely rare (and likely caused by an extension that does ad blocker-like things, like blocking tracking).
LICENSE
This code is derived from several sources. All original code is licensed under the Apache License, Version 2.0, see full text at: https://github.com/arjun-menon/multi-adblock-detect/blob/master/LICENSE.md
The detection code is derived from multiple sources.
detectAdBlockBaitElementOrXhrGoogle
: https://github.com/wmcmurray/just-detect-adblock (no license information)- which in turn is derived from: https://github.com/sitexw/BlockAdBlock (MIT license)
detectAdBlockFetchDoubleClick
: https://github.com/aruniverse/adblock-detect-react/blob/master/adblock-detect-react (no license information)- 3 algorithms are from: https://incolumitas.com/2020/12/27/detecting-uBlock-Origin-and-Adblock-Plus-with-JavaScript-only/ (no license information)
detectAdBlockFetchOrXhrAdsByGoogle
(the "ultimate" solution in the article above)- Dervied from: https://github.com/NikolaiT/adblock-detect-javascript-only/blob/master/index.js (no license information)
detectAdBlockScriptAdsByGoogle
(first solution in the article above)detectAdBlockScriptSailthruJs
(an update solution from May 25th 2022)
detectAdBlockScriptAdsJs
: an in-house solution, this might be removed soon due to low effectiveness
The wrapper code here is released under Apache 2.0.