Skip to content
IframeViewer

Aprende

Por qué se bloquean los iframes — y qué hacer

Todo lo que sabe Iframe Viewer, por escrito. Ojea los títulos o ve directo a la tabla de sandbox.

X-Frame-Options

La cabecera original contra el clickjacking. Un servidor la añade a la respuesta para indicar al navegador si ese documento puede renderizarse dentro de <frame>, <iframe>, <embed> u <object>.

DENY

Nunca en un frame, ni siquiera por el mismo sitio.

SAMEORIGIN

Solo en páginas del mismo origen.

ALLOW-FROM uri

Obsoleto. Ignorado por los navegadores modernos — usa CSP.

Cabecera de respuesta
HTTP/2 200
X-Frame-Options: SAMEORIGIN

Content-Security-Policy: frame-ancestors

El sustituto moderno. Admite una lista de orígenes padre permitidos, comodines y esquemas. Cuando ambas cabeceras están presentes, los navegadores que soportan frame-ancestors ignoran X-Frame-Options.

Permitir solo tu sitio y un socio
Content-Security-Policy: frame-ancestors 'self' https://*.partner.com
Bloquear todo iframe
Content-Security-Policy: frame-ancestors 'none'

Fíjate en la directiva espejo: frame-src en tu página controla qué URLs puedes insertar. Si el embed funciona en Iframe Viewer pero no en tu sitio, revisa primero tu propio CSP.

Flags de sandbox

Un atributo sandbox vacío elimina todas las capacidades. Devuelve los tokens uno a uno.

TokenConcede
allow-scriptsPermite que la página ejecute JavaScript.
allow-same-originConserva el origen de la página (cookies, storage). Con scripts, anula el sandbox para contenido del mismo origen.
allow-formsPermite enviar formularios.
allow-popupsPermite window.open y target=_blank.
allow-popups-to-escape-sandboxLas ventanas abiertas no tienen sandbox.
allow-modalsalert(), confirm(), prompt(), print().
allow-top-navigationPermite que el frame navegue tu página.
allow-top-navigation-by-user-activationNavegación superior solo tras un clic/toque.
allow-downloadsPermite descargas iniciadas por el frame.
allow-presentationPresentation API (transmisión).
allow-pointer-lockPointer Lock API (juegos).
allow-orientation-lockBloqueo de orientación de pantalla.

Permissions Policy (allow)

Mientras sandbox elimina capacidades, allow delega funciones potentes al frame. Cada entrada es un nombre de función, opcionalmente seguido de una lista de orígenes.

<iframe
  src="https://player.example.com/v/123"
  allow="fullscreen; autoplay; picture-in-picture; clipboard-write"
  allowfullscreen
></iframe>

¿Qué sitios permiten iframes?

La base que usa el probador. Valores observados — pueden cambiar sin aviso; confirma con el comando curl antes de publicar.

DominioIframeCabecera / alternativa
google.comBloqueadoX-Frame-Options: SAMEORIGINGoogle Maps and YouTube expose dedicated /embed endpoints instead.
youtube.comBloqueadoX-Frame-Options: SAMEORIGINUse https://www.youtube.com/embed/VIDEO_ID for embedding.
facebook.comBloqueadoX-Frame-Options: DENYUse the official Facebook Page/Post plugins.
instagram.comBloqueadoX-Frame-Options: SAMEORIGINUse instagram.com/p/ID/embed/ for public posts.
twitter.comBloqueadoX-Frame-Options: DENYUse publish.twitter.com to get a widget snippet.
x.comBloqueadoX-Frame-Options: DENYUse publish.twitter.com to get a widget snippet.
linkedin.comBloqueadoX-Frame-Options: SAMEORIGIN
github.comBloqueadoX-Frame-Options: DENYGists can be embedded via the script snippet on each gist.
amazon.comBloqueadoX-Frame-Options: SAMEORIGIN
netflix.comBloqueadoX-Frame-Options: DENY
reddit.comBloqueadocontent-security-policy: frame-ancestors 'self'Use embed.reddit.com for individual posts.
stackoverflow.comBloqueadoX-Frame-Options: SAMEORIGIN
paypal.comBloqueadoX-Frame-Options: SAMEORIGIN
apple.comBloqueadoX-Frame-Options: SAMEORIGIN
microsoft.comBloqueadoX-Frame-Options: SAMEORIGIN
openai.comBloqueadocontent-security-policy: frame-ancestors 'none'
chatgpt.comBloqueadocontent-security-policy: frame-ancestors 'none'
notion.soBloqueadoX-Frame-Options: SAMEORIGINPublic pages can be embedded via notion.site links in some tools.
figma.comBloqueadoX-Frame-Options: SAMEORIGINUse the /embed?embed_host=... URL from Share → Get embed code.
wikipedia.orgPermitido(no framing restriction)Wikipedia allows framing.
example.comPermitido(no framing restriction)
codepen.ioPermitido(embeds allowed via /embed/ URLs)Use the Embed button on a pen for the canonical snippet.
vimeo.comBloqueadoX-Frame-Options: SAMEORIGINUse https://player.vimeo.com/video/ID.
player.vimeo.comPermitido(embed endpoint)
open.spotify.comBloqueadoX-Frame-Options: SAMEORIGINUse https://open.spotify.com/embed/... URLs.
maps.google.comBloqueadoX-Frame-Options: SAMEORIGINUse the Share → Embed a map snippet.

FAQ

¿Por qué el iframe aparece en blanco o dice “rechazó la conexión”?

El sitio envió una cabecera X-Frame-Options (DENY o SAMEORIGIN) o un Content-Security-Policy con frame-ancestors que no incluye tu origen. Los navegadores lo respetan y muestran una página de error. La cabecera exacta se ve en DevTools → Consola o con el comando curl que te da Iframe Viewer.

¿Cómo pruebo si un sitio se puede insertar en un iframe?

Pega la URL en el probador de arriba y pulsa Renderizar. Iframe Viewer la carga en un iframe real al tamaño de dispositivo elegido e informa si la carga funcionó, qué señal decidió el resultado y cuánto tardó.

¿Puede Iframe Viewer leer la cabecera X-Frame-Options directamente?

No solo desde el navegador: las cabeceras de respuesta de otro origen están ocultas para JavaScript por diseño. Iframe Viewer combina comprobaciones deterministas (contenido mixto, base de sitios populares), el evento load del navegador y un sondeo de mismo origen, y siempre indica qué señal produjo el veredicto. Usa el comando curl para la verdad definitiva.

El probador dice “Evento load disparado”, pero sigo viendo una página de error. ¿Cuál tiene razón?

Ambos. Chrome y Firefox disparan load incluso cuando sustituyen por una página de error, así que el evento por sí solo no distingue éxito de bloqueo. Confía en tus ojos para la decisión final y usa curl para confirmar.

¿Iframe Viewer guarda o registra las URLs que pruebo?

No. No hay servidor. Tu historial se guarda en el localStorage del navegador para sobrevivir a recargas y puedes borrarlo con un clic. Analytics, si lo aceptas, solo cuenta vistas y clics — nunca las URLs probadas.

¿Cuál es la diferencia entre allow y sandbox?

sandbox elimina capacidades (scripts, formularios, popups, navegación) y tú devuelves solo lo necesario. allow es la Permissions Policy para funciones potentes como cámara, pantalla completa o pago. Usa ambos para contenido de terceros que no controlas.

¿Por qué mi embed funciona aquí pero no en mi sitio?

Causas comunes: tu página es HTTPS y el destino es HTTP (contenido mixto), el destino comprueba la cabecera Referer, o el Content-Security-Policy de tu propio sitio tiene frame-src sin el destino. Prueba la opción de política de referrer en Opciones del frame.

¿Iframe Viewer es realmente gratis?

Sí — totalmente gratis, sin cuenta, sin límites. Es un sitio estático sin costes de servidor que recuperar.