Elementos Incrustados HTML

Introducción

Una ventana de madera que muestra un paisaje exterior y un televisor CRT incrustado en la pared mostrando una escena similar
Analogía visual de las etiquetas HTML incrustadas: una ventana representa un <iframe> y un televisor incrustado representa un <embed>, ambos insertados en una pared.

Las etiquetas <iframe>, <embed>, <object> y <param> forman parte de los elementos utilizados para incrustar o integrar contenido externo en una página web.

  • La etiqueta <iframe> permite mostrar otro documento HTML dentro de la página actual, como si se abriera una ventana hacia otro sitio.
  • por su parte, <embed> facilita la inserción de contenido multimedia, como videos o documentos PDF, de forma directa y sin controles adicionales.
  • La etiqueta <object> es más versátil y se utiliza para insertar desde archivos multimedia hasta aplicaciones como applets o visualizadores.
  • Finalmente, <param> acompaña a <object> y se encarga de definir los parámetros de configuración del contenido empotrado, como su comportamiento o presentación.

Elemento <iframe>

<iframe> es un elemento HTML que permite mostrar dentro de una página web otro documento o recurso externo como si fuera una ventana independiente, de modo que el contenido incrustado se visualiza integrado en el diseño, pero sigue funcionando de forma aislada del HTML principal, facilitando así incluir vídeos, mapas u otras páginas sin mezclarlas directamente con el código del sitio.

Sintaxis básica:

                 
                    <iframe src="https://www.ejemplo.com"
                    width="600"
                    height="400"
                    title="Ejemplo de iframe"
                    allowfullscreen
                    loading="lazy">
                  </iframe>
                  
                

Explicación de los atributos más usados:

  • src: Especifica la URL del contenido que se mostrará.
  • width y height: Definen el ancho y alto del iframe.
  • title: Mejora la accesibilidad describiendo el contenido del iframe.
  • frameborder (obsoleto, se recomienda CSS): Permitía mostrar o quitar el borde.
  • allowfullscreen: Permite que el contenido se muestre a pantalla completa.
  • loading="lazy": Carga diferida del iframe para mejorar el rendimiento.
  • sandbox: Restringe las acciones que puede realizar el contenido incrustado.
    Se puede permitir capacidades específicas agregando valores separados por espacios:
    • Por defecto, cuando se agrega sandbox sin valores, el iframe tiene las restricciones más estrictas posibles:
                                
                                  <iframe src="ejemplo.html" sandbox></iframe>
                                
                              
    • Restricciones de navegación:
      • allow-top-navigation: Permite que la página contenida en el <iframe> pueda navegar y modificar la URL de la ventana principal que lo aloja.
      • allow-top-navigation-by-user-activation: Es más seguro, solo permite cambiar la URL de la ventana principal si hay una acción directa del usuario, como hacer clic o tocar un botón.
    • Ejecución de scripts:
      • allow-scripts: Habilita la ejecución de scripts en JavaScript dentro del elemento <iframe>. Sin este permiso, el código JavaScript contenido en el <iframe> no se ejecutará, ya que el atributo sandbox bloquea por defecto la ejecución de scripts para garantizar mayor seguridad.
      • allow-same-origin: El atributo allow-same-origin permite que el contenido de un <iframe> se comporte como si perteneciera al mismo origen (dominio, protocolo y puerto) que la página que lo contiene. Por defecto, el sandbox aísla completamente el contenido del <iframe>, restringiendo su acceso a cookies y datos del mismo dominio. Al habilitar allow-same-origin, se elimina esta restricción, permitiendo que el iframe interactúe como parte integral de la misma página web.
    • Formularios y contenido:
      • allow-forms: Permite envío de formularios.
      • allow-popups: Permite ventanas emergentes.
      • allow-modals: Permite alertas, confirms, etc.
    • Multimedia:
      • allow-pointer-lock: Permite bloqueo del puntero.
      • allow-orientation-lock: Permite bloqueo de orientación.

Ejemplo:

Ejemplos Prácticos de <iframe>

1. YouTube Video Embebido

Video responsivo con controles habilitados y reproducción automática deshabilitada:

2. Google Maps Embebido

Mapa interactivo con ubicación específica:

3. Página Web Externa con Sandbox

Iframe con restricciones de seguridad usando sandbox:

4. Formulario de Contacto Externo

Iframe responsivo para embeber un formulario:

📝 Aquí se cargaría un formulario externo
(Ejemplo de Google Forms)

                        
                          
<div class="ej-container-iframe"> <p class="ej-h1-iframe">Ejemplos Prácticos de <iframe></p> <div class="ej-card-iframe"> <p class="ej-h2-iframe">1. YouTube Video Embebido</p> <p class="ej-text-iframe">Video responsivo con controles habilitados y reproducción automática deshabilitada:</p> <iframe src="https://www.youtube.com/embed/qP23O70ve7k?si=frOFpcVp9p8Rqb9m" width="560" height="315" title="Video de YouTube" frameborder="0" allowfullscreen allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" class="ej-iframe-iframe"> </iframe> </div> <div class="ej-card-iframe"> <p class="ej-h2-iframe">2. Google Maps Embebido</p> <p class="ej-text-iframe">Mapa interactivo con ubicación específica:</p> <iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3976.2623658098954!2d-74.0817291!3d4.6486259!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x8e3f9a0c0b1c0c0b%3A0x0!2sBogot%C3%A1%2C%20Colombia!5e0!3m2!1ses!2sco!4v1234567890" width="600" height="400" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade" title="Mapa de Bogotá" class="ej-iframe-iframe"> </iframe> </div> <div class="ej-card-iframe"> <p class="ej-h2-iframe">3. Página Web Externa con Sandbox</p> <p class="ej-text-iframe">Iframe con restricciones de seguridad usando sandbox:</p> <iframe src="https://example.com" width="100%" height="300" title="Sitio web de ejemplo" frameborder="0" sandbox="allow-scripts allow-same-origin allow-forms" loading="lazy" class="ej-iframe-iframe"> <p>Tu navegador no soporta iframes. <a href="https://example.com">Visita el sitio directamente</a> </p> </iframe> </div> <div class="ej-card-iframe"> <p class="ej-h2-iframe">4. Formulario de Contacto Externo</p> <p class="ej-text-iframe">Iframe responsivo para embeber un formulario:</p> <div class="ej-placeholder-iframe"> <p>📝 Aquí se cargaría un formulario externo<br>(Ejemplo de Google Forms)</p> </div> </div> </div>
                        
                          
.ej-container-iframe { font-family: 'Georgia', serif; margin: 0; padding: 30px; min-height: 100vh; color: #2c3e50; } .ej-card-iframe { margin: 40px 0; padding: 30px; background: rgba(255, 255, 255, 0.95); border-radius: 20px; box-shadow: 0 15px 35px rgba(0, 0, 0, 0.1); backdrop-filter: blur(10px); border: 1px solid rgba(255, 255, 255, 0.2); transition: transform 0.3s ease, box-shadow 0.3s ease; } .ej-card-iframe:hover { transform: translateY(-5px); box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15); } .ej-h1-iframe { font-size: 2.8rem; font-weight: 300; text-align: center; margin-bottom: 50px; color: #fff; text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); letter-spacing: 2px; } .ej-h2-iframe { font-size: 1.6rem; color: #2c3e50; margin-bottom: 20px; padding-left: 20px; border-left: 4px solid #e74c3c; font-weight: 400; } .ej-text-iframe { font-size: 1.1rem; line-height: 1.8; margin-bottom: 20px; color: #34495e; } .ej-code-iframe { background: linear-gradient(145deg, #f1f2f6, #ddd); padding: 4px 8px; border-radius: 6px; font-family: 'Monaco', 'Menlo', monospace; font-size: 0.9rem; color: #e74c3c; font-weight: 600; } .ej-codeblock-iframe { background: linear-gradient(145deg, #2c3e50, #34495e); color: #ecf0f1; padding: 25px; border-radius: 15px; overflow-x: auto; margin: 20px 0; font-family: 'Monaco', 'Menlo', monospace; font-size: 0.9rem; line-height: 1.6; box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); } .ej-iframe-iframe { border: 3px solid #3498db; border-radius: 15px; box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1); transition: transform 0.3s ease; } .ej-iframe-iframe:hover { transform: scale(1.02); } .ej-placeholder-iframe { width: 100%; height: 300px; background: linear-gradient(45deg, #f39c12, #e67e22); border: 3px solid #3498db; border-radius: 15px; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 1.2rem; text-align: center; font-weight: 600; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); }

Elemento <embed>

La etiqueta HTML <embed> es un elemento que se utiliza para integrar contenido externo o aplicaciones interactivas (generalmente no HTML) en una página web. Es una adición reciente en HTML5.

Por ejemplo, si se quiere mostrar un archivo PDF dentro de una página web, se puede usar así:

Sintaxis básica:

                  
                    <embed src="archivo.pdf" type="application/pdf" width="600" height="400">
                  
                

Atributos principales:

  • src: indica la URL o ruta del archivo que se va a incrustar.
  • type: describe el tipo MIME del recurso (en este caso, application/pdf).
  • width y height: definen el tamaño del área visible del recurso incrustado.

Tipos de contenido comunes:

  • PDFs: type="application/pdf".
  • Videos: type="video/mp4".
  • Audio: type="audio/mpeg".
  • Imágenes SVG: type="image/svg+xml".
  • Aplicaciones Flash (obsoleto): type="application/x-shockwave-flash".

Características importantes:

  • Elemento vacío: <embed> no tiene contenido interno ni etiqueta de cierre y su soporte depende del navegador y los plugins instalados.
  • Flexible: permite incrustar muchos tipos de archivos multimedia y documentos.
  • Control limitado: ofrece menos opciones de control y personalización que otras etiquetas como <video> o <audio>, que tienen atributos y métodos específicos.
  • La etiqueta <embed> sigue siendo útil especialmente para PDFs y algunos tipos de contenido especializado que no tienen elementos HTML específicos.

Diferencias clave entre <embed> y <iframe>:

  • Propósito: <iframe> está diseñado principalmente para incrustar documentos HTML completos y aislarlos. <embed> fue diseñado para incrustar otros tipos de medios o aplicaciones que a menudo requerían plugins.
  • Contenido: <iframe> carga una página web (HTML, CSS, JS). <embed> carga archivos binarios o recursos que el navegador debe interpretar con un visor o plugin específico (PDF, SWF, etc.).
  • Modelo de seguridad/aislamiento: <iframe> tiene un modelo de seguridad más robusto y bien definido. <embed> depende más de la seguridad de los plugins.

Consideraciones importantes:

  • Compatibilidad y Plugins: El mayor problema con <embed> es que el contenido que incrusta puede depender de que el usuario tenga un plugin específico instalado en su navegador. Si no lo tiene, el contenido simplemente no se mostrará.
  • Seguridad: El uso de plugins es un riesgo de seguridad conocido, por lo que muchos han sido deshabilitados o eliminados de los navegadores modernos (como Flash). Por esto, se prefiere evitar <embed> para contenido que requiera plugins obsoletos.
  • Alternativas Modernas: Siempre que sea posible, prefiere las etiquetas modernas y estándares:
    • Para video: <video>
    • Para audio: <audio>
    • Para contenido HTML o PDF: <iframe>

Ejemplos prácticos:

                
                  <!-- Incrustar un PDF -->
                  <embed src="documento.pdf" type="application/pdf" width="100%" height="500px">

                  <!-- Incrustar un video -->
                  <embed src="video.mp4" type="video/mp4" width="640" height="480">

                  <!-- Incrustar contenido SVG -->
                  <embed src="grafico.svg" type="image/svg+xml" width="300" height="200">

                
              

Elemento <object>

La etiqueta <object> en HTML es un elemento diseñado para incrustar prácticamente cualquier tipo de archivo o recurso externo dentro de una página web.

Su función principal es actuar como un “contenedor universal” que permite al navegador mostrar o manejar distintos tipos de contenido, siempre que el navegador o el dispositivo tenga soporte para el tipo de archivo que se intenta incrustar.

¿Por qué es tan versátil?: Porque no está limitada a un solo tipo de recurso. Con <object> se pueden incrustar:

  • Archivos multimedia (videos, audios).
  • Documentos PDF.
  • Imágenes (incluyendo formatos especiales como SVG).
  • Aplicaciones Java o Flash (aunque hoy en día están en desuso).
  • Incluso otras páginas HTML completas.

Sintaxis básica:

                  
                   <object data="ruta-del-archivo" type="tipo-mime" width="ancho" height="alto">
                      <!-- Contenido alternativo si el objeto no se puede cargar -->
                      <p>Tu navegador no puede mostrar este contenido.</p>
                    </object>
                  
                

Atributos principales:

  • data: indica la URL del archivo o recurso que se quiere incrustar.
  • type: especifica el tipo MIME del recurso (por ejemplo, image/svg+xml, application/pdf, etc.). Esto ayuda al navegador a saber cómo manejar el archivo.
  • width y height: definen el tamaño del área donde se mostrará el objeto.
  • name: Asigna un nombre al objeto para referenciarlo.
  • form: Asocia el objeto con un formulario.
  • Entre las etiquetas de apertura <object> y cierre </object>, se puede colocar contenido alternativo. Este contenido se mostrará si el navegador no puede mostrar el recurso incrustado.

Ventajas:

  • Muy flexible para diferentes tipos de contenido.
  • Permite contenido alternativo (fallback).
  • Soporta parámetros adicionales.
  • Estándar HTML válido.

Consideraciones:

  • Algunos navegadores pueden manejar ciertos tipos de contenido de manera diferente.
  • Para videos y audio modernos, se prefieren las etiquetas <video> y <audio>.
  • Para contenido Flash, está prácticamente obsoleto.
  • Siempre incluir contenido alternativo para accesibilidad.
  • Históricamente, <object> se usaba mucho para contenido que requería plugins externos (como Flash). Hoy en día, los navegadores han mejorado mucho su soporte nativo para muchos formatos multimedia, reduciendo la necesidad de plugins.
  • Siempre se debe considerar el contenido alternativo para que los usuarios puedan acceder a la información incluso si el objeto no se carga.

Ejemplos:

                  
                    <!-- Incrustar un PDF -->
                    <object data="documento.pdf" type="application/pdf" width="600" height="400">
                      <p>No se puede mostrar el PDF. <a href="documento.pdf">Descarga aquí</a></p>
                    </object>

                    <!-- Incrustar una imagen -->
                    <object data="imagen.jpg" type="image/jpeg" width="300" height="200">
                      <img src="imagen-alternativa.jpg" alt="Imagen alternativa">
                    </object>

                    <!-- Incrustar contenido webF -->
                    <object data="https://ejemplo.com" width="800" height="600">
                      <p>No se puede cargar el sitio web.</p>
                    </object>
                  
                

Elemento <param>

El elemento HTML <param> se utiliza para definir parámetros que se pasan a plugins o applets embebidos en una página web. Este elemento siempre debe estar contenido dentro de un elemento <object>.

Sintaxis básica:

                  
                  <object data="video.mp4" type="video/mp4" width="400" height="300">
                    <param name="autoplay" value="false">
                    <param name="controls" value="true">
                    <param name="loop" value="false">
                      Tu navegador no soporta este contenido.
                  </object>
                
                

Atributos principales <param>:

  • name: el nombre del parámetro que el objeto reconocerá.
  • value: el valor que se asigna a ese parámetro.

En este ejemplo, el video no se reproduce automáticamente, muestra controles de reproducción y se se reproduce sólo una vez.

¿Es importante hoy en día?:

El elemento <param> y otros como <object> o <applet> han quedado obsoletos en la mayoría de las aplicaciones web modernas. Esto se debe a que la interacción con contenido multimedia y aplicaciones en la web ha evolucionado significativamente, integrándose de manera más fluida y avanzada en la propia estructura de las páginas web.


COMENTARIOS

Si tiene alguna inquietud, duda o ha encontrado algún error, por favor infórmelo a través del formulario disponible para este propósito.

La política de privacidad, y los términos y condiciones están disponibles en el formulario de contacto.