From d45d39aa607014974e886f4b2dc4ee5a356eafa8 Mon Sep 17 00:00:00 2001 From: Usman Baig Date: Tue, 17 Mar 2026 10:17:21 +0100 Subject: [PATCH] feat: add client-side headless browser detection Skip events from headless Chrome (empty plugins, missing chrome runtime), hidden browsers (zero outer dimensions), and known bot viewports (1024x1024). --- public/script.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/public/script.js b/public/script.js index f66f4c8..9dfc800 100644 --- a/public/script.js +++ b/public/script.js @@ -18,6 +18,21 @@ return; } + // * Skip likely bots: headless Chrome fingerprints and known bot viewports + var isChrome = /Chrome/.test(navigator.userAgent) && !/Edg/.test(navigator.userAgent); + if ( + // * Headless Chrome has zero plugins (real Chrome always has at least 1; Firefox excluded — it legitimately reports 0) + (isChrome && navigator.plugins && navigator.plugins.length === 0) || + // * Headless Chrome lacks the chrome runtime object + (isChrome && !window.chrome) || + // * No outer window dimensions — headless or hidden browser + (window.outerWidth === 0 || window.outerHeight === 0) || + // * Default headless viewport: exactly 1024x1024 (no real monitor uses this) + (window.innerWidth === 1024 && window.innerHeight === 1024) + ) { + return; + } + // * Get domain from script tag const script = document.currentScript || document.querySelector('script[data-domain]'); if (!script || !script.getAttribute('data-domain')) {