La Etiqueta OBJECT

Permite incrustar recursos externos en un documento HTML, como imágenes, videos, PDFs, aplicaciones web o incluso otros documentos HTML.

La etiqueta <object> permite incrustar recursos externos en un documento HTML, como imágenes, videos, PDFs, aplicaciones web o incluso otros documentos HTML. Es una herramienta versátil que ofrece una alternativa a etiquetas específicas como <img>, <iframe> o <video>, especialmente útil para contenido que requiere flexibilidad o soporte multiplataforma.

Sintaxis básica

<object 
  data="URL-del-recurso" 
  type="tipo-MIME" 
  width="ancho" 
  height="alto"
>
  <!-- Contenido alternativo (fallback) -->
</object>

Atributos principales:

  • data: URL del recurso a incrustar.

  • type: Tipo MIME del recurso (ej: image/png, application/pdf).

  • width/height: Dimensiones del contenedor.

  • name: Nombre para referencias en formularios o scripts.

Casos de uso comunes

Incrustar un PDF

<object 
  data="documento.pdf" 
  type="application/pdf" 
  width="800" 
  height="600"
>
  <p>Tu navegador no soporta PDFs. 
    <a href="documento.pdf">Descárgalo aquí</a>.
  </p>
</object>

Incrustar una imagen (alternativa a <img>)

<object 
  data="logo.svg" 
  type="image/svg+xml" 
  width="200" 
  height="200"
>
  <img src="logo.png" alt="Logo alternativo">
</object>

Incrustar contenido HTML

<object 
  data="widget.html" 
  type="text/html" 
  width="300" 
  height="200"
>
  <p>Contenido no disponible. Visita <a href="widget.html">este enlace</a>.</p>
</object>

Incrustar un video (menos común)

<object 
  data="video.mp4" 
  type="video/mp4" 
  width="640" 
  height="360"
>
  <video controls>
    <source src="video.mp4" type="video/mp4">
    Tu navegador no soporta videos.
  </video>
</object>

Estilización y comportamiento

CSS: Aplica estilos al contenedor, pero no al contenido incrustado.

object {
  border: 2px solid #333;
  margin: 10px;
}

JavaScript: Puedes interactuar con el objeto mediante el DOM:

const miObjeto = document.querySelector("object");
miObjeto.addEventListener("load", () => {
  console.log("Recurso cargado");
});

Fallback y accesibilidad

El contenido dentro de <object> se muestra si el navegador no soporta el recurso. Es crucial para:

  • Accesibilidad: Los lectores de pantalla acceden al fallback.

  • Compatibilidad: Asegura funcionalidad básica sin plugins o soporte avanzado.

Ejemplo de fallback múltiple:

<object data="app.swf" type="application/x-shockwave-flash">
  <object data="app.pdf" type="application/pdf">
    <p>Descarga <a href="app.pdf">la guía en PDF</a>.</p>
  </object>
</object>

Comparación con otras etiquetas

Etiqueta Uso recomendado
<img> Imágenes simples (JPEG, PNG, SVG).
<iframe> Incrustar páginas web completas.
<video> Reproductores de video con controles nativos.
<object> Recursos complejos o múltiples formatos (PDF, SVG).

Errores comunes

  1. Olvidar el atributo type:
    Sin él, el navegador no puede determinar cómo manejar el recurso.

  2. Ignorar el fallback:
    Siempre proporciona contenido alternativo para usuarios sin soporte.

  3. Usar <object> para imágenes simples:
    Prefiere <img> por su simplicidad y optimización SEO.

Consideraciones de seguridad

  • XSS (Cross-Site Scripting):
    Evita incrustar contenido de fuentes no confiables.

  • Plugins obsoletos:
    No dependas de tecnologías como Flash o Java Applets (obsoletas).

Compatibilidad

  • Navegadores modernos: Soporte amplio, pero varía según el tipo de recurso.

  • PDFs: Chrome y Edge tienen soporte nativo; otros requieren plugins.

  • SVG/HTML: Ampliamente soportado.

Ejemplo avanzado: Incrustar SVG con interactividad

<object 
  data="grafico.svg" 
  type="image/svg+xml" 
  width="400" 
  height="400"
  id="svgObject"
>
  <img src="grafico.png" alt="Gráfico estático">
</object>

<script>
  document.getElementById("svgObject").addEventListener("load", () => {
    const svgDoc = document.getElementById("svgObject").contentDocument;
    const rect = svgDoc.querySelector("rect");
    rect.addEventListener("click", () => {
      alert("Hiciste clic en el rectángulo SVG");
    });
  });
</script>

Conclusión

La etiqueta <object> es una herramienta poderosa para incrustar recursos dinámicos y multimedia, siempre que se use con buenas prácticas:

  • Define siempre el type MIME.

  • Proporciona contenido alternativo accesible.

  • Prioriza etiquetas específicas (como <img>) cuando sea posible.

Ejemplo final:

<object 
  data="https://example.com/interactive-chart" 
  type="application/xhtml+xml" 
  width="600" 
  height="400"
>
  <p>Explora el <a href="https://example.com/interactive-chart">gráfico interactivo aquí</a>.</p>
</object>

Con este tutorial, podrás integrar recursos complejos en tus proyectos HTML de manera eficiente y accesible.