HTML5

HTML

Tutorial HTML: Incrustación de contenido (iframe)

Aprende a usar iframes en HTML para incrustar mapas, videos y documentos con seguridad y diseño responsivo. Domina atributos y buenas prácticas.

Aprende HTML y certifícate

Propósito y usos del elemento iframe

El elemento <iframe> (inline frame) es una herramienta fundamental en HTML que permite incrustar documentos HTML independientes dentro de una página web principal. Funciona como una ventana que muestra contenido de otra fuente, creando una experiencia integrada para los usuarios.

¿Qué es un iframe?

Un iframe crea un contexto de navegación anidado dentro de tu página web. Esto significa que puedes mostrar contenido de otros sitios web o recursos sin que el usuario tenga que abandonar tu página. El contenido del iframe se carga y funciona de manera independiente al documento principal.

La sintaxis básica de un iframe es sencilla:

<iframe src="https://ejemplo.com"></iframe>

Principales usos de los iframes

Los iframes son extremadamente versátiles y se utilizan en numerosos escenarios:

  • Integración de contenido externo: Permite mostrar contenido de otros sitios web sin necesidad de duplicarlo.
<iframe src="https://docs.google.com/document/d/e/2PACX-1vT..."></iframe>
  • Mapas interactivos: Incorporar mapas de servicios como Google Maps o OpenStreetMap.
<iframe 
  src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d12345.67890!2d-3.7037902!3d40.4167754!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0xd422997800a3c81%3A0xc436dec1618c2269!2sMadrid!5e0!3m2!1ses!2ses!4v1600000000000!5m2!1ses!2ses">
</iframe>
  • Reproductores de video: Integrar videos de plataformas como YouTube o Vimeo.
<iframe 
  src="https://www.youtube.com/embed/dQw4w9WgXcQ">
</iframe>
  • Widgets de redes sociales: Mostrar publicaciones, líneas de tiempo o botones de interacción.
<iframe 
  src="https://www.facebook.com/plugins/post.php?href=https%3A%2F%2Fwww.facebook.com%2Ffacebook%2Fposts%2F10153231379946729">
</iframe>
  • Aplicaciones web embebidas: Incorporar calculadoras, calendarios o herramientas interactivas.
<iframe 
  src="https://calendar.google.com/calendar/embed?src=example%40gmail.com">
</iframe>
  • Previsualizaciones de documentos: Mostrar PDFs, presentaciones o documentos sin necesidad de descargarlos.
<iframe 
  src="https://docs.google.com/viewer?url=http://example.com/document.pdf&embedded=true">
</iframe>

Ventajas de usar iframes

Los iframes ofrecen varias ventajas que los hacen útiles en el desarrollo web:

  • Aislamiento de contenido: El contenido del iframe está separado del documento principal, lo que evita conflictos de estilos o scripts.

  • Carga independiente: El contenido del iframe puede cargarse sin afectar al resto de la página.

  • Mantenimiento simplificado: Al incrustar contenido externo, no necesitas actualizarlo manualmente cuando cambia en su fuente original.

  • Experiencia de usuario mejorada: Los usuarios pueden interactuar con contenido externo sin abandonar tu sitio web.

Casos de uso prácticos

Incrustación de mapas interactivos

Los mapas son uno de los usos más comunes de los iframes. Permiten a los usuarios explorar ubicaciones sin salir de tu sitio:

<div class="map-container">
  <h3>Nuestra ubicación</h3>
  <iframe 
    src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3037.6167379590934!2d-3.7037902!3d40.4167754!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0xd422997800a3c81%3A0xc436dec1618c2269!2sMadrid!5e0!3m2!1ses!2ses!4v1600000000000!5m2!1ses!2ses"
    width="400" 
    height="300">
  </iframe>
  <p>Visítanos en nuestra sede central</p>
</div>

Integración de videos

Los videos incrustados mejoran significativamente el engagement en una página:

<div class="video-wrapper">
  <h3>Tutorial de HTML</h3>
  <iframe 
    width="560" 
    height="315" 
    src="https://www.youtube.com/embed/UB1O30fR-EE">
  </iframe>
  <p>Aprende los fundamentos de HTML en este tutorial</p>
</div>

Formularios externos

Puedes integrar formularios de servicios externos como Google Forms:

<div class="form-container">
  <h3>Encuesta de satisfacción</h3>
  <iframe 
    src="https://docs.google.com/forms/d/e/1FAIpQLSf9d0oZYUkJ4vVlU5JIFnjmHkEEiQqJZwHvv1CjkO_8qX8Lnw/viewform?embedded=true"
    width="640" 
    height="800">
    Cargando formulario...
  </iframe>
</div>

Consideraciones de diseño

Al utilizar iframes, es importante tener en cuenta algunos aspectos de diseño:

  • Responsividad: Los iframes no son responsivos por defecto. Es recomendable utilizar CSS para asegurar que se adapten a diferentes tamaños de pantalla:
<style>
  .responsive-iframe-container {
    position: relative;
    overflow: hidden;
    padding-top: 56.25%; /* Proporción 16:9 */
  }
  
  .responsive-iframe-container iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    border: 0;
  }
</style>

<div class="responsive-iframe-container">
  <iframe src="https://www.youtube.com/embed/dQw4w9WgXcQ"></iframe>
</div>
  • Tiempos de carga: El contenido del iframe puede aumentar el tiempo de carga de la página. Considera usar técnicas de carga diferida (lazy loading) para mejorar el rendimiento.

  • Accesibilidad: Asegúrate de proporcionar un título descriptivo usando el atributo title para ayudar a los usuarios de lectores de pantalla:

<iframe 
  src="https://example.com/mapa" 
  title="Mapa interactivo de nuestra ubicación en Madrid">
</iframe>

Los iframes son una herramienta poderosa para enriquecer tus páginas web con contenido externo, pero deben utilizarse con conocimiento de sus implicaciones de seguridad y rendimiento, temas que exploraremos en las siguientes secciones.

Atributos src, width, height y sandbox

Para configurar correctamente un iframe y controlar su comportamiento, es esencial comprender los atributos principales que determinan su apariencia y funcionamiento. Estos atributos permiten personalizar cómo se muestra el contenido incrustado y establecer restricciones de seguridad.

El atributo src

El atributo src (source) es obligatorio y especifica la URL del documento que se mostrará dentro del iframe. Este atributo es la base para cualquier iframe funcional:

<iframe src="https://example.com/page.html"></iframe>

El valor de src puede apuntar a diferentes tipos de recursos:

  • URLs absolutas: Direcciones completas a sitios externos
<iframe src="https://maps.google.com/maps?q=madrid"></iframe>
  • URLs relativas: Rutas a documentos dentro del mismo sitio web
<iframe src="/recursos/documento.html"></iframe>
  • Contenido en blanco: Usando about:blank para inicializar un iframe vacío que puede llenarse posteriormente con JavaScript
<iframe src="about:blank" id="frame-dinamico"></iframe>

Los atributos width y height

Los atributos width (ancho) y height (alto) definen las dimensiones del iframe en la página. Puedes especificarlos en píxeles o porcentajes:

<iframe 
  src="https://example.com" 
  width="600" 
  height="400">
</iframe>

Usando porcentajes para un diseño más adaptable:

<iframe 
  src="https://example.com" 
  width="100%" 
  height="300">
</iframe>

Es importante considerar:

  • Si no especificas estos atributos, el navegador asignará un tamaño predeterminado (generalmente 300×150 píxeles).
  • Para crear iframes responsivos, es mejor combinar estos atributos con CSS:
<style>
  .iframe-container {
    width: 100%;
    max-width: 800px;
  }
  
  .iframe-container iframe {
    width: 100%;
    height: 450px;
    border: none;
  }
</style>

<div class="iframe-container">
  <iframe src="https://example.com"></iframe>
</div>

El atributo sandbox

El atributo sandbox es una característica de seguridad crucial que restringe las capacidades del contenido incrustado. Cuando se aplica sin valores, impone las restricciones más estrictas:

<iframe 
  src="https://external-content.com" 
  sandbox>
</iframe>

Este iframe con sandbox completo:

  • No puede ejecutar JavaScript
  • No puede enviar formularios
  • No puede abrir ventanas emergentes
  • No puede acceder a cookies o almacenamiento local
  • Trata el contenido como de origen único (same-origin policy)

Para permitir ciertas capacidades, puedes añadir valores específicos al atributo sandbox:

<iframe 
  src="https://trusted-site.com" 
  sandbox="allow-scripts allow-forms">
</iframe>

Valores comunes para el atributo sandbox

  • allow-scripts: Permite la ejecución de JavaScript dentro del iframe
<iframe 
  src="https://example.com/widget" 
  sandbox="allow-scripts">
</iframe>
  • allow-forms: Permite el envío de formularios
<iframe 
  src="https://example.com/contact-form" 
  sandbox="allow-forms">
</iframe>
  • allow-same-origin: Permite que el contenido se trate como del mismo origen, manteniendo acceso a cookies y almacenamiento
<iframe 
  src="https://subdomain.mysite.com/tool" 
  sandbox="allow-same-origin">
</iframe>
  • allow-popups: Permite abrir ventanas emergentes desde el iframe
<iframe 
  src="https://example.com/share-tool" 
  sandbox="allow-popups">
</iframe>
  • allow-top-navigation: Permite que el iframe navegue a la ventana principal
<iframe 
  src="https://example.com/navigation-menu" 
  sandbox="allow-top-navigation">
</iframe>

Es común combinar varios valores para lograr el equilibrio adecuado entre funcionalidad y seguridad:

<iframe 
  src="https://trusted-interactive-widget.com" 
  sandbox="allow-scripts allow-forms allow-popups"
  width="500"
  height="300">
</iframe>

Ejemplos prácticos combinando atributos

Incrustación segura de un widget interactivo

<iframe 
  src="https://widget-provider.com/weather-widget" 
  width="300" 
  height="200" 
  sandbox="allow-scripts allow-same-origin">
</iframe>

Este ejemplo permite que el widget ejecute scripts para mostrar datos actualizados, pero mantiene otras restricciones de seguridad.

Documento PDF incrustado con dimensiones específicas

<iframe 
  src="https://docs.google.com/viewer?url=https://example.com/document.pdf&embedded=true" 
  width="800" 
  height="600">
</iframe>

Este iframe muestra un documento PDF utilizando el visor de Google Docs con dimensiones optimizadas para la lectura.

Mapa responsivo con restricciones de seguridad

<iframe 
  src="https://www.openstreetmap.org/export/embed.html?bbox=-0.13%2C51.50%2C-0.12%2C51.51&amp;layer=mapnik" 
  width="100%" 
  height="350" 
  sandbox="allow-scripts allow-same-origin">
</iframe>

Este ejemplo muestra un mapa de OpenStreetMap que se adapta al ancho del contenedor mientras permite la interactividad básica.

Atributos adicionales útiles

Aunque src, width, height y sandbox son los más importantes, existen otros atributos que pueden mejorar la experiencia:

  • loading: Controla cómo se carga el iframe (eager o lazy)
<iframe 
  src="https://example.com" 
  width="600" 
  height="400" 
  loading="lazy">
</iframe>
  • title: Proporciona un título accesible para el iframe
<iframe 
  src="https://example.com/contact" 
  width="500" 
  height="300" 
  title="Formulario de contacto">
</iframe>
  • allow: Controla qué características (como geolocalización, pantalla completa, etc.) puede usar el iframe
<iframe 
  src="https://maps-with-location.com" 
  width="600" 
  height="450" 
  allow="geolocation">
</iframe>

Buenas prácticas al usar estos atributos

  • Siempre especifica dimensiones: Proporciona valores para width y height para evitar cambios bruscos en el diseño durante la carga.

  • Usa sandbox por defecto: Aplica el atributo sandbox y solo permite las capacidades estrictamente necesarias.

  • Combina con CSS para responsividad: Los atributos width y height funcionan mejor cuando se complementan con CSS para diferentes tamaños de pantalla.

  • Considera la accesibilidad: Añade siempre un atributo title descriptivo para usuarios de tecnologías asistivas.

<iframe 
  src="https://example.com/video-player" 
  width="100%" 
  height="400" 
  sandbox="allow-scripts" 
  title="Reproductor de video tutorial sobre HTML"
  loading="lazy">
</iframe>

Dominar estos atributos te permitirá crear iframes que no solo muestren correctamente el contenido deseado, sino que también lo hagan de manera segura y optimizada para diferentes dispositivos y contextos de uso.

Consideraciones de seguridad con iframes

Los iframes son herramientas útiles para incrustar contenido externo, pero también introducen importantes riesgos de seguridad que todo desarrollador debe conocer. Entender estas vulnerabilidades es fundamental para implementar iframes de manera segura en tus proyectos web.

Riesgos de seguridad principales

Cuando incorporas un iframe en tu sitio web, estás esencialmente abriendo una "ventana" a otro contenido que puede comportarse de formas inesperadas:

  • Ataques de clickjacking: Los atacantes pueden superponer contenido invisible sobre elementos interactivos, engañando a los usuarios para que hagan clic en elementos que no pretendían.

  • Filtración de información: Un iframe malicioso podría intentar acceder a datos sensibles de tu página principal.

  • Inyección de scripts: Sin las restricciones adecuadas, el contenido del iframe podría ejecutar scripts que comprometan la seguridad de tu sitio.

  • Redirecciones no deseadas: Un iframe podría intentar redirigir a los usuarios a sitios maliciosos.

Protección contra clickjacking

El clickjacking es una de las amenazas más comunes relacionadas con iframes. Para proteger tu sitio contra este tipo de ataque, puedes implementar encabezados HTTP de seguridad:

<!-- En el servidor, configura el encabezado HTTP: -->
<!-- X-Frame-Options: DENY -->

Este encabezado impide que tu sitio sea incrustado en iframes de otros sitios. Alternativamente, puedes permitir solo dominios específicos:

<!-- X-Frame-Options: ALLOW-FROM https://trusted-site.com -->

Una alternativa moderna es usar la política de seguridad de contenido (CSP):

<!-- Content-Security-Policy: frame-ancestors 'self' https://trusted-site.com -->

Uso del atributo referrerpolicy

El atributo referrerpolicy controla qué información de referencia se envía cuando los usuarios interactúan con el contenido del iframe:

<iframe 
  src="https://external-service.com/widget" 
  referrerpolicy="no-referrer">
</iframe>

Valores comunes incluyen:

  • no-referrer: No envía información de referencia
  • origin: Solo envía el origen (dominio) de tu sitio
  • strict-origin: Similar a origin, pero no envía el origen en conexiones HTTPS a HTTP

Prevención de ataques XSS a través de iframes

Para prevenir ataques de Cross-Site Scripting (XSS) relacionados con iframes:

<iframe 
  src="https://external-content.com" 
  sandbox="allow-scripts allow-same-origin"
  csp="script-src 'self'">
</iframe>

El atributo csp (aunque con soporte limitado) permite definir una política de seguridad específica para el iframe.

Protección contra la extracción de datos

Para evitar que un iframe acceda a información de tu página principal:

<iframe 
  src="https://third-party-content.com" 
  sandbox 
  allow="camera 'none'; microphone 'none'; geolocation 'none'">
</iframe>

El atributo allow restringe el acceso a características específicas del navegador como cámara, micrófono o geolocalización.

Implementación de Content Security Policy (CSP)

La Política de Seguridad de Contenido es una capa adicional de seguridad que puedes implementar en tu servidor:

<!-- En el servidor, configura el encabezado HTTP: -->
<!-- Content-Security-Policy: default-src 'self'; frame-src https://trusted-site.com -->

Esta política restringe de dónde pueden cargarse los iframes, permitiendo solo dominios específicos.

Verificación de fuentes confiables

Antes de incrustar contenido externo, siempre debes verificar:

  • Reputación del dominio: ¿Es una fuente confiable y establecida?
  • Protocolo HTTPS: Asegúrate de que el contenido se sirva a través de HTTPS para evitar ataques de intermediarios.
  • Políticas de privacidad: Revisa cómo maneja los datos del usuario el sitio que estás incrustando.
<!-- Preferir siempre HTTPS -->
<iframe 
  src="https://trusted-service.com/widget" 
  sandbox="allow-scripts">
</iframe>

Técnicas de aislamiento avanzadas

Para sitios con requisitos de seguridad más estrictos, considera estas técnicas:

  • Iframes en subdominios: Coloca el contenido sensible en un subdominio diferente para aprovechar la política del mismo origen.
<!-- El contenido principal está en example.com -->
<iframe src="https://iframe-content.example.com/widget"></iframe>
  • Comunicación postMessage segura: Si necesitas comunicación entre tu página y el iframe, utiliza el método postMessage con verificación de origen:
// En la página principal
const iframe = document.getElementById('secure-frame');
iframe.contentWindow.postMessage({data: 'mensaje seguro'}, 'https://trusted-domain.com');

// En el iframe
window.addEventListener('message', function(event) {
  // Verificar siempre el origen
  if (event.origin !== 'https://my-main-site.com') {
    return;
  }
  // Procesar el mensaje
  console.log(event.data);
});

Monitoreo y respuesta a incidentes

Implementa un sistema para detectar comportamientos sospechosos:

  • Utiliza herramientas de monitoreo de seguridad web
  • Configura alertas para actividades inusuales relacionadas con iframes
  • Establece un plan de respuesta a incidentes para actuar rápidamente ante posibles brechas

Ejemplo práctico: Incrustación segura de un widget de terceros

Este ejemplo muestra cómo incrustar un widget externo con múltiples capas de seguridad:

<div class="widget-container">
  <iframe 
    src="https://widget-provider.com/weather-widget" 
    sandbox="allow-scripts allow-forms" 
    referrerpolicy="origin"
    loading="lazy"
    width="300" 
    height="200"
    title="Widget del clima para Madrid">
    <p>Su navegador no soporta iframes. Visite <a href="https://widget-provider.com/weather-widget">Widget del clima</a> directamente.</p>
  </iframe>
</div>

<script>
  // Verificar si el iframe se carga correctamente
  document.querySelector('iframe').addEventListener('load', function() {
    console.log('Iframe cargado correctamente');
  });
  
  // Manejar errores de carga
  document.querySelector('iframe').addEventListener('error', function() {
    console.error('Error al cargar el iframe');
    // Mostrar contenido alternativo
    document.querySelector('.widget-container').innerHTML = '<p>No se pudo cargar el widget. Intente más tarde.</p>';
  });
</script>

Este enfoque:

  • Restringe las capacidades del iframe con sandbox
  • Limita la información de referencia con referrerpolicy
  • Proporciona contenido alternativo para navegadores que no soportan iframes
  • Incluye manejo de errores para mejorar la experiencia del usuario

Lista de verificación de seguridad para iframes

Antes de implementar un iframe en producción, verifica estos puntos:

  • ¿Has aplicado el atributo sandbox con los permisos mínimos necesarios?
  • ¿El contenido se sirve a través de HTTPS?
  • ¿Has configurado encabezados de seguridad apropiados en tu servidor?
  • ¿Has probado el iframe en diferentes navegadores para verificar su comportamiento?
  • ¿Tienes un plan para monitorear y responder a problemas de seguridad?
  • ¿Has proporcionado una alternativa para usuarios con navegadores que no soportan iframes?

Implementar estas prácticas de seguridad te ayudará a aprovechar los beneficios de los iframes mientras minimizas los riesgos asociados. Recuerda que la seguridad web es un proceso continuo que requiere atención constante a medida que evolucionan las amenazas y las tecnologías.

Incrustación de contenido: mapas, videos, documentos

Los iframes nos permiten integrar diversos tipos de contenido externo en nuestras páginas web. Esta capacidad resulta especialmente útil para incorporar elementos multimedia y documentos sin tener que desarrollarlos desde cero. Veamos cómo implementar los casos de uso más comunes de forma práctica y segura.

Incrustación de mapas interactivos

Los mapas interactivos son uno de los usos más populares de los iframes. Servicios como Google Maps, OpenStreetMap o Mapbox ofrecen opciones para incrustar sus mapas en tu sitio web.

Google Maps

Para incrustar un mapa de Google Maps:

  1. Visita Google Maps y busca la ubicación deseada
  2. Haz clic en "Compartir"
  3. Selecciona la pestaña "Incorporar un mapa"
  4. Copia el código HTML proporcionado
<div class="map-container">
  <h3>Nuestra tienda en Madrid</h3>
  <iframe 
    src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3037.6!2d-3.703!3d40.416!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x0!2zNDDCsDI1JzAwLjAiTiAzwrA0MicxMS4xIlc!5e0!3m2!1ses!2ses!4v1600000000000!5m2!1ses!2ses" 
    width="600" 
    height="450" 
    style="border:0;" 
    allowfullscreen="" 
    loading="lazy" 
    referrerpolicy="no-referrer-when-downgrade">
  </iframe>
  <p>Horario: Lunes a Viernes de 9:00 a 20:00</p>
</div>

OpenStreetMap

OpenStreetMap es una alternativa de código abierto que también permite incrustar mapas:

<iframe 
  width="425" 
  height="350" 
  src="https://www.openstreetmap.org/export/embed.html?bbox=-3.7153%2C40.4115%2C-3.6881%2C40.4249&amp;layer=mapnik" 
  style="border: 1px solid #ccc">
</iframe>
<p><small><a href="https://www.openstreetmap.org/#map=16/40.4182/-3.7017">Ver mapa más grande</a></small></p>

Incrustación de videos

Los videos incrustados pueden enriquecer significativamente el contenido de tu sitio web. Las plataformas de video más populares ofrecen opciones sencillas para integrar sus reproductores.

YouTube

Para incrustar un video de YouTube:

  1. Ve al video que deseas incrustar
  2. Haz clic en "Compartir"
  3. Selecciona "Insertar"
  4. Copia el código HTML proporcionado
<div class="video-wrapper">
  <h3>Tutorial de HTML5</h3>
  <iframe 
    width="560" 
    height="315" 
    src="https://www.youtube.com/embed/pQN-pnXPaVg" 
    title="Tutorial de HTML5" 
    frameborder="0" 
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" 
    allowfullscreen>
  </iframe>
  <p>Aprende los conceptos básicos de HTML5 en este tutorial completo</p>
</div>

Para hacer que los videos sean responsivos, puedes utilizar este patrón CSS:

<style>
  .responsive-video {
    position: relative;
    padding-bottom: 56.25%; /* Proporción 16:9 */
    height: 0;
    overflow: hidden;
    max-width: 100%;
  }
  
  .responsive-video iframe {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
  }
</style>

<div class="responsive-video">
  <iframe 
    src="https://www.youtube.com/embed/pQN-pnXPaVg" 
    title="Tutorial de HTML5" 
    allowfullscreen>
  </iframe>
</div>

Vimeo

Vimeo es otra plataforma popular para incrustar videos:

<iframe 
  src="https://player.vimeo.com/video/76979871" 
  width="640" 
  height="360" 
  frameborder="0" 
  allow="autoplay; fullscreen; picture-in-picture" 
  allowfullscreen>
</iframe>
<p><a href="https://vimeo.com/76979871">The HTML5 Overview</a></p>

Incrustación de documentos

Los iframes también son útiles para mostrar documentos como PDFs, presentaciones o hojas de cálculo directamente en tu página web.

Documentos PDF

Existen varias formas de incrustar PDFs. La más sencilla es usar el elemento <iframe> directamente:

<iframe 
  src="documentos/manual.pdf" 
  width="100%" 
  height="500px">
  Este navegador no soporta la visualización de PDFs. <a href="documentos/manual.pdf">Descargue el PDF</a> en su lugar.
</iframe>

Sin embargo, no todos los navegadores manejan los PDFs de la misma manera. Una alternativa más compatible es usar el visor de PDF de Google:

<iframe 
  src="https://docs.google.com/viewer?url=https://ejemplo.com/documentos/manual.pdf&embedded=true" 
  width="100%" 
  height="500px">
  <p>Su navegador no soporta iframes. <a href="documentos/manual.pdf">Descargue el PDF</a>.</p>
</iframe>

Presentaciones de Google Slides

Para incrustar una presentación de Google Slides:

<iframe 
  src="https://docs.google.com/presentation/d/e/2PACX-1vRs_85SYS-hiIrUP4IUFyJb3N9J-6QoLsZ-g7xoqC9QQsC9Y0hGSECGcVvwQoHwYA/embed?start=false&loop=false&delayms=3000" 
  frameborder="0" 
  width="680" 
  height="418" 
  allowfullscreen="true" 
  mozallowfullscreen="true" 
  webkitallowfullscreen="true">
</iframe>

Hojas de cálculo de Google Sheets

Para incrustar una hoja de cálculo de Google Sheets:

<iframe 
  src="https://docs.google.com/spreadsheets/d/e/2PACX-1vQCdAIGVj9YWzMzEH1L8u0yCRtGqYmL7LCY-5siMbBnkEMPtUknG6K7CzwTNjc9Lg/pubhtml?widget=true&amp;headers=false"
  width="700" 
  height="400">
</iframe>

Incrustación de contenido social

Las redes sociales ofrecen widgets que puedes incrustar para mostrar contenido dinámico.

Twitter (Timeline)

<iframe
  src="https://platform.twitter.com/widgets/timeline/profile?screenName=html5"
  width="300"
  height="500"
  style="border: none; overflow: hidden;">
</iframe>

Instagram (Publicación)

<iframe
  src="https://www.instagram.com/p/CdEF123AbCd/embed"
  width="400"
  height="480"
  frameborder="0"
  scrolling="no"
  allowtransparency="true">
</iframe>

Técnicas avanzadas de incrustación

Carga diferida (lazy loading)

Para mejorar el rendimiento de tu página, especialmente cuando incluyes múltiples iframes, utiliza el atributo loading="lazy":

<iframe 
  src="https://www.youtube.com/embed/pQN-pnXPaVg" 
  width="560" 
  height="315" 
  loading="lazy">
</iframe>

Este atributo indica al navegador que cargue el iframe solo cuando esté cerca de entrar en la ventana gráfica, reduciendo el tiempo de carga inicial de la página.

Contenido alternativo

Siempre proporciona contenido alternativo dentro del iframe para usuarios cuyos navegadores no soporten iframes o tengan problemas para cargar el contenido:

<iframe src="https://maps.google.com/maps?q=madrid&output=embed" width="600" height="450">
  <p>Este navegador no soporta iframes. <a href="https://maps.google.com/maps?q=madrid">Ver el mapa de Madrid</a>.</p>
</iframe>

Manejo de errores

Puedes implementar JavaScript para detectar problemas de carga y ofrecer alternativas:

<div id="map-container">
  <iframe 
    id="google-map"
    src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3037.6!2d-3.703!3d40.416!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x0!2zNDDCsDI1JzAwLjAiTiAzwrA0MicxMS4xIlc!5e0!3m2!1ses!2ses!4v1600000000000!5m2!1ses!2ses" 
    width="600" 
    height="450">
  </iframe>
</div>

<script>
  document.getElementById('google-map').addEventListener('error', function() {
    document.getElementById('map-container').innerHTML = 
      '<div class="error-message">' +
      '<p>No se pudo cargar el mapa. <a href="https://goo.gl/maps/abcde">Ver en Google Maps</a>.</p>' +
      '</div>';
  });
</script>

Ejemplos prácticos combinados

Página de contacto con mapa y formulario

<div class="contact-page">
  <div class="map-section">
    <h2>Nuestra ubicación</h2>
    <iframe 
      src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3037.6!2d-3.703!3d40.416!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x0!2zNDDCsDI1JzAwLjAiTiAzwrA0MicxMS4xIlc!5e0!3m2!1ses!2ses!4v1600000000000!5m2!1ses!2ses" 
      width="100%" 
      height="300" 
      style="border:0;" 
      loading="lazy" 
      referrerpolicy="no-referrer-when-downgrade">
    </iframe>
  </div>
  
  <div class="form-section">
    <h2>Envíanos un mensaje</h2>
    <iframe 
      src="https://docs.google.com/forms/d/e/1FAIpQLSf9d0oZYUkJ4vVlU5JIFnjmHkEEiQqJZwHvv1CjkO_8qX8Lnw/viewform?embedded=true" 
      width="100%" 
      height="500" 
      frameborder="0" 
      marginheight="0" 
      marginwidth="0"
      sandbox="allow-scripts allow-forms allow-same-origin">
      Cargando formulario...
    </iframe>
  </div>
</div>

Página de recursos con documentos y videos

<div class="resources-page">
  <h1>Recursos de aprendizaje</h1>
  
  <div class="resource-item">
    <h2>Manual de HTML5</h2>
    <iframe 
      src="https://docs.google.com/viewer?url=https://ejemplo.com/documentos/manual-html5.pdf&embedded=true" 
      width="100%" 
      height="400"
      loading="lazy">
      <p>Su navegador no soporta iframes. <a href="documentos/manual-html5.pdf">Descargue el PDF</a>.</p>
    </iframe>
  </div>
  
  <div class="resource-item">
    <h2>Video tutorial: CSS Básico</h2>
    <div class="responsive-video">
      <iframe 
        src="https://www.youtube.com/embed/1PnVor36_40" 
        title="Tutorial de CSS" 
        allowfullscreen
        loading="lazy">
      </iframe>
    </div>
  </div>
</div>

Consideraciones finales para la incrustación de contenido

Al incrustar contenido externo, ten en cuenta estas recomendaciones:

  • Rendimiento: Cada iframe adicional aumenta el tiempo de carga de la página. Usa loading="lazy" para contenido que no es inmediatamente visible.

  • Responsividad: Asegúrate de que el contenido incrustado se adapte a diferentes tamaños de pantalla utilizando CSS apropiado.

  • Accesibilidad: Incluye siempre el atributo title en tus iframes y proporciona contenido alternativo para usuarios que no pueden ver el iframe.

  • Origen del contenido: Asegúrate de que el contenido que incrustas provenga de fuentes confiables y se sirva a través de HTTPS.

  • Permisos: Utiliza el atributo sandbox con los permisos mínimos necesarios para que el contenido funcione correctamente.

La incrustación de contenido mediante iframes es una técnica versátil que te permite enriquecer tus páginas web con recursos externos de forma sencilla, manteniendo el control sobre cómo se presenta y se comporta ese contenido dentro de tu sitio.

Aprende HTML online

Otros ejercicios de programación de HTML

Evalúa tus conocimientos de esta lección Incrustación de contenido (iframe) con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de HTML

Accede a todas las lecciones de HTML y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a HTML y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender qué es un iframe y su función en HTML.
  • Aprender a utilizar los atributos principales de iframe como src, width, height y sandbox.
  • Conocer los principales usos prácticos de iframes, incluyendo mapas, videos y documentos.
  • Identificar las consideraciones de seguridad y cómo protegerse de vulnerabilidades asociadas a iframes.
  • Aplicar buenas prácticas para la incrustación de contenido externo, incluyendo accesibilidad y rendimiento.