UNPKG

@hyperbrowser/agent

Version:

Hyperbrowsers Web Agent

117 lines (116 loc) 3.28 kB
"use strict"; /** * Utilities for filtering ad and tracking frames * Prevents non-interactive ad iframes from polluting the frame graph */ Object.defineProperty(exports, "__esModule", { value: true }); exports.isAdOrTrackingFrame = isAdOrTrackingFrame; /** * Check if a frame is likely an ad or tracking iframe * * Detection criteria: * 1. Tiny pixel frames (1x1) - common for tracking pixels * 2. Known ad/tracking keywords in URL or name * 3. Known ad network domains * 4. Common tracking file extensions */ function isAdOrTrackingFrame(context) { const { url, name } = context; const urlLower = url.toLowerCase(); const nameLower = (name || "").toLowerCase(); // 1. Empty or about:blank frames (except named ones which might be legitimate) if (!url || url === "about:blank") { return !name; // Keep if it has a name, filter if anonymous } // 2. Pixel/sync frame patterns in title/name const suspiciousPatterns = [ /\(1×1\)/i, /\(1x1\)/i, /pixel/i, /sync/i, /user-sync/i, /cookie-sync/i, /usersync/i, /match/i, /ecm3/i, /dcm/i, /safeframe/i, /topics\s+frame/i, ]; if (suspiciousPatterns.some(pattern => pattern.test(urlLower) || pattern.test(nameLower))) { return true; } // 3. Tracking/ad file extensions const trackingExtensions = [ '.gif', '.ashx', '.png?', '/pixel', '/sync', '/match', '/usersync', ]; if (trackingExtensions.some(ext => urlLower.includes(ext))) { return true; } // 4. Known ad network domains const adDomains = [ // Google ad networks 'doubleclick.net', 'googlesyndication.com', 'googleadservices.com', 'google-analytics.com', 'googletagmanager.com', 'googletagservices.com', 'imasdk.googleapis.com', // Yahoo/Verizon Media 'ybp.yahoo.com', 'yahoo.com/pixel', // Major ad exchanges 'adnxs.com', 'rubiconproject.com', 'pubmatic.com', 'openx.net', 'advertising.com', 'contextweb.com', 'casalemedia.com', // Retargeting/programmatic 'criteo.com', 'criteo.net', 'bidswitch.net', // Analytics/tracking 'quantserve.com', 'scorecardresearch.com', 'moatads.com', 'adsafeprotected.com', 'chartbeat.com', // Content recommendation (often ads) 'outbrain.com', 'taboola.com', 'zemanta.com', // Other common ad networks 'openwebmedia.org', 'turn.com', 'advertising.com', 'amazon-adsystem.com', ]; if (adDomains.some(domain => urlLower.includes(domain))) { return true; } // 5. Data URIs (often used for embedded ads) if (urlLower.startsWith('data:')) { return true; } // 6. Common tracking query parameters const trackingParams = [ 'correlator=', 'google_push=', 'gdfp_req=', 'prebid', 'pubads', ]; if (trackingParams.some(param => urlLower.includes(param))) { return true; } return false; }