rhinosnow
v1.0.0
Published
Detect browser extensions like ad blockers and Dark Reader
Readme
rhinoSnow
Lightweight, SSR-safe browser extension detection for JavaScript and TypeScript. Detect ad blockers and Dark Reader with zero dependencies.
Install
npm install rhinosnowUsage
import {
detectAdBlocker,
detectDarkReader,
checkAndWarnDarkReader
} from "rhinosnow";
// Detect ad blockers
if (detectAdBlocker()) {
console.log("Ad blocker detected");
}
// Detect Dark Reader
if (detectDarkReader()) {
console.log("Dark Reader detected");
}
// Show a dismissible warning banner if Dark Reader is active
checkAndWarnDarkReader();
// Or with a custom message
checkAndWarnDarkReader("Please disable Dark Reader for the best experience.");API
detectAdBlocker(): boolean
Creates a hidden bait element with common ad-related class names and checks whether it was hidden or removed by an ad blocker.
Returns true if an ad blocker is detected, false otherwise.
detectDarkReader(): boolean
Checks for the presence of Dark Reader by looking for:
- Injected
<style>elements with Dark Reader classes data-darkreader-*attributes on<html>- Dark Reader
<meta>tags - CSS
invert+hue-rotatefilters on<body>
Returns true if Dark Reader is detected, false otherwise.
checkAndWarnDarkReader(warningMessage?: string): boolean
If Dark Reader is detected, displays a fixed-position warning banner in the top-right corner of the page. The banner auto-dismisses after 10 seconds or can be clicked to dismiss immediately. Repeated calls will not create duplicate banners.
| Parameter | Type | Default |
|---|---|---|
| warningMessage | string (optional) | "Dark Reader extension detected. Please disable it on this site to prevent potential crashes due to performance issues." |
Returns true if the warning is shown (or already visible), false otherwise.
SSR Safety
All functions are safe to import and call in server-side environments (Next.js, Nuxt, SvelteKit, etc.). They return false when window or document is not available.
Browser Support
Works in all modern browsers that support getComputedStyle and querySelector.
License
MIT
