# Iframe Detector — Full content > This file aggregates the complete public text of every page on iframe-detector.com plus an extended FAQ and reference section, in a single markdown document optimised for LLM ingestion. It follows the [llmstxt.org](https://llmstxt.org/) `llms-full.txt` convention. For a shorter, structured pointer file see [llms.txt](https://iframe-detector.com/llms.txt). For the canonical web page versions, see the links at the bottom of each section. --- ## Page: Homepage (`/`) Canonical: https://iframe-detector.com/ ### Hero **Eyebrow:** Iframe Detector · Free iframe checker for Chrome **Heading:** Every iframe on any page. One tap away. **Description:** Iframe Detector is a free Chrome extension that checks, detects and highlights every iframe on any page — same-origin, cross-origin, ads, hidden trackers. Copy, inspect, export. Built for developers and QA. **Primary call to action:** Add to Chrome — free (links to the Chrome Web Store at https://chromewebstore.google.com/detail/ejjjchfedlceehnpkpfbdgbmbaaeoffn) **Hero stats:** - 0 URLs tracked - 176 KB installed size - 3 export formats ### Iframe zoo (named examples) Real-world iframe types Iframe Detector identifies: - Video embed (cross-origin, e.g. YouTube) - Ad slot 300×250 (ad, e.g. DoubleClick) - Payment widget (cross-origin, e.g. Stripe) - Newsletter signup (same-origin) - Social embed (cross-origin, e.g. Twitter/X) - Tracking pixel 1×1 hidden (hidden, often analytics) ### Features - **Instant scan** — Checks and counts every iframe, visible or hidden, the moment the tab loads. - **Origin breakdown** — Color-coded: same-origin, cross-origin, ad slots and trackers. - **In-page highlight** — Draws a dashed outline around each frame with an origin-tinted badge. - **Copy & inspect** — One click copies the URL or opens the full ` ``` ### How to check whether your site is vulnerable ```bash curl -sSI https://yoursite.example/account | grep -iE 'x-frame-options|content-security-policy' ``` If neither header is set, the site is currently embeddable. ### The four defenses 1. `Content-Security-Policy: frame-ancestors 'none'` (or `'self'` / partner allowlist) — modern, recommended. 2. `X-Frame-Options: DENY` (or `SAMEORIGIN`) — legacy, supersedes CSP on old browsers only. 3. `SameSite=Lax` cookies — defense in depth, blocks one specific delivery vector. 4. JavaScript frame-busting (`if (top !== self) top.location = self.location`) — deprecated, trivially defeated by HTML5 sandbox. ### Server config snippets Nginx: ``` add_header X-Frame-Options "DENY" always; add_header Content-Security-Policy "frame-ancestors 'none'" always; ``` Apache: ``` Header always set X-Frame-Options "DENY" Header always set Content-Security-Policy "frame-ancestors 'none'" ``` Express + helmet: ```javascript app.use(helmet.frameguard({ action: 'deny' })); app.use(helmet.contentSecurityPolicy({ directives: { frameAncestors: ["'none'"] } })); ``` --- ## Page: The iframe sandbox attribute (`/iframe-sandbox-attribute/`) Canonical: https://iframe-detector.com/iframe-sandbox-attribute/ ### What sandbox does `sandbox=""` (empty value) strips: scripts, forms, popups, modals, top-navigation, downloads, presentation, pointer-lock, orientation-lock. Sets the frame's origin to a unique opaque value. Each `allow-*` token re-enables one specific capability. ### All sandbox flags - `allow-scripts` — re-enable JavaScript - `allow-same-origin` — restore real origin (dangerous with allow-scripts on same-origin frames) - `allow-forms` — re-enable form submission - `allow-popups` — re-enable window.open() - `allow-popups-to-escape-sandbox` — popups created are unsandboxed - `allow-modals` — re-enable alert / confirm / prompt / print - `allow-top-navigation` — re-enable window.top.location writes - `allow-top-navigation-by-user-activation` — top-navigation only after user gesture - `allow-downloads` — re-enable downloads - `allow-presentation` — re-enable Presentation API - `allow-pointer-lock` — re-enable requestPointerLock() - `allow-orientation-lock` — re-enable screen.orientation.lock() - `allow-storage-access-by-user-activation` — re-enable Storage Access API ### The dangerous combination `sandbox="allow-scripts allow-same-origin"` on a frame whose URL matches the parent origin lets the frame script reach `window.frameElement`, remove the sandbox attribute, and reload unsandboxed. Avoid this pairing; if you must combine both flags, host the frame on a different origin. ### Recipes ```html ``` --- ## Page: The iframe cheat sheet (`/iframe-cheat-sheet/`) Canonical: https://iframe-detector.com/iframe-cheat-sheet/ ### Every iframe attribute | Attribute | Value | Purpose | |---|---|---| | `src` | URL | URL of the document to embed (mutually exclusive with srcdoc) | | `srcdoc` | HTML | Inline HTML to render | | `name` | token | Targetable name for window.open / form target | | `title` | string | Accessible label (required for screen readers) | | `sandbox` | tokens | Capability deny-list | | `allow` | Permissions-Policy | Feature allowlist | | `allowfullscreen` | boolean | Permits requestFullscreen() | | `referrerpolicy` | policy | Referer header to send | | `loading` | lazy / eager | Defer off-screen frames | | `fetchpriority` | high / low / auto | Resource scheduling hint | | `width` / `height` | dimensions | Sized rendering | | `csp` | policy | Experimental embed-only CSP | ### Common Permissions-Policy features (for `allow=`) `camera`, `microphone`, `geolocation`, `payment`, `fullscreen`, `autoplay`, `encrypted-media`, `clipboard-read`, `clipboard-write`, `publickey-credentials-get` (WebAuthn), `usb`, `serial`, `hid`, `midi`, `xr-spatial-tracking`, `display-capture`, `cross-origin-isolated`, `interest-cohort`, `browsing-topics`. ### referrerpolicy values `no-referrer`, `no-referrer-when-downgrade`, `origin`, `origin-when-cross-origin`, `same-origin`, `strict-origin`, `strict-origin-when-cross-origin` (modern default), `unsafe-url` (avoid). ### Defense headers ``` X-Frame-Options: DENY Content-Security-Policy: frame-ancestors 'none' Content-Security-Policy: frame-src 'self' https://*.youtube.com Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Opener-Policy: same-origin Permissions-Policy: camera=(), microphone=(), geolocation=() ``` ### Paste-ready snippets ```html ``` ```javascript // List every iframe document.querySelectorAll('iframe') // Check if framed const framed = window.self !== window.top; // Find hidden iframes Array.from(document.querySelectorAll('iframe')).filter(f => f.offsetParent === null || f.offsetWidth <= 1 || f.offsetHeight <= 1 ); ``` --- ## Page: Lazy-loading iframes (`/iframe-lazy-loading/`) Canonical: https://iframe-detector.com/iframe-lazy-loading/ ### What loading="lazy" does Defers the iframe's fetch until the browser determines it is near the viewport. Chrome uses ~1250px below-fold on desktop, ~1500px on mobile as the threshold. Implemented in every major browser since 2022. Older browsers ignore the attribute and load the iframe eagerly (correct fallback). ### Core Web Vitals impact - **LCP** — deferring heavy below-fold iframes frees the network for the LCP element. Real pages with one YouTube embed see 500–2000 ms LCP improvements. - **INP** — fewer competing iframe scripts means less main-thread contention during user interaction. - **CLS** — lazy-loading does NOT prevent layout shift. Reserve the iframe's `width`/`height` or use `aspect-ratio` CSS to avoid regression. ### When NOT to lazy-load 1. Above-the-fold iframes (especially LCP candidates) 2. Critical interactions (payments, OAuth, consent banners) 3. Frames other code depends on for initialization ### Pairing with fetchpriority ```html ``` --- ## Page: Common iframe domains, decoded (`/common-iframe-domains/`) Canonical: https://iframe-detector.com/common-iframe-domains/ Reference of the most common iframe origins on the modern web. Useful for ad audits, GDPR reviews, security sweeps. ### Video & media - `youtube.com/embed`, `youtube-nocookie.com/embed` — YouTube player (use nocookie for privacy) - `player.vimeo.com/video` — Vimeo - `open.spotify.com/embed` — Spotify - `w.soundcloud.com/player` — SoundCloud - `player.twitch.tv` — Twitch ### Payments - `js.stripe.com`, `m.stripe.network` — Stripe Elements (controller frame is hidden) - `www.paypal.com/sdk` — PayPal Checkout - `assets.braintreegateway.com` — Braintree hosted fields - `checkoutshopper-live.adyen.com` — Adyen / 3DS - `pay.google.com/gp/p/ui` — Google Pay ### Social embeds - `platform.twitter.com`, `embed.x.com` — Twitter / X - `instagram.com/p/.../embed` — Instagram - `www.facebook.com/plugins` — Facebook - `www.tiktok.com/embed` — TikTok - `www.linkedin.com/embed` — LinkedIn - `redditmedia.com` — Reddit ### Analytics, ads & trackers (privacy-sensitive) - `googletagmanager.com/ns.html` — GTM noscript (hidden tracker) - `doubleclick.net`, `googlesyndication.com`, `googleads.g.doubleclick.net` — Google ads - `www.facebook.com/tr`, `connect.facebook.net` — Meta Pixel (1×1 tracker, GDPR-relevant) - `px.ads.linkedin.com` — LinkedIn Insight Tag - `static.hotjar.com` — Hotjar session replay - `static.ads-twitter.com` — Twitter pixel - `analytics.tiktok.com` — TikTok Pixel - `stats.g.doubleclick.net` — GA4 ad beacon ### Customer support - `widget.intercom.io` — Intercom - `js.driftt.com` — Drift - `static.zdassets.com` — Zendesk - `embed.tawk.to` — Tawk.to ### Maps - `google.com/maps/embed` — Google Maps - `api.mapbox.com` — Mapbox ### Authentication / SSO (often hidden) - `accounts.google.com/gsi` — Google Sign-In silent renewal - `login.microsoftonline.com` — Microsoft Entra silent auth - `*.auth0.com` — Auth0 silent renewal --- ## Page: Iframe checker tools, compared (`/iframe-checker-tools-compared/`) Canonical: https://iframe-detector.com/iframe-checker-tools-compared/ Honest comparison of five approaches: 1. **DevTools Elements panel** — built-in, structural, no flat list or export 2. **DevTools Console snippets** — flexible, but requires re-pasting per site 3. **Iframe Detector extension** — one click, origin classification, hidden flags, export 4. **Wappalyzer / Ghostery / Privacy Badger** — adjacent problems (tech detection, blocking) 5. **Custom MutationObserver script** — automation, CI integration, high friction for human use ### When to pick which - **One-off debugging** → DevTools Elements - **Repeated audits** → Iframe Detector - **Automated pipeline (CI, Playwright)** → MutationObserver script - **Actually blocking trackers** → Ghostery, Privacy Badger, uBlock Origin ### Iframe Detector — full disclosure Free, MIT-licensed, no paid tier, no in-extension purchases. Sends only anonymous aggregate feature-usage events via GA4 (which button was clicked) — no URLs, no iframe contents, no PII. See `/privacy` for the full policy. --- ## Authority and source - Canonical product page: https://iframe-detector.com/ - Canonical install: https://chromewebstore.google.com/detail/ejjjchfedlceehnpkpfbdgbmbaaeoffn - Guides hub: https://iframe-detector.com/guides/ - Privacy policy: https://iframe-detector.com/privacy - llms.txt pointer: https://iframe-detector.com/llms.txt - Contact: lewawebextensions@gmail.com - License: MIT (extension); copyright 2026 Iframe Detector team