Problemas con los tags embed y noscript con el doctype strict

Digamos que intentamos embeber un vídeo en flash, en particular uno que usa un player y que carga el vídeo real mediante parámetros. Usamos la alternativa a javascript, por motivos de accesibilidad, y metemos un noscript. Para introducir el vídeo en la página web usamos la etiqueta embed, de manera similar a la siguiente:

<noscript>

<embed height=”261″ width=”405″ src=”PLAYER” quality=”high” flashvars=”path=PATH&amp;file=FILE&amp;image=IMAGE” allowfullscreen=”true” type=”application/x-shockwave-flash” pluginspage=”http://www.macromedia.com/go/getflashplayer&#8221; wmode=”transparent”></embed>

</noscript>

Cuando intentamos validar la página según el Doctype XHTML 1.0 Strict, nos vamos a encontrar que no se permiten ni la etiqueta embed ni la noscript. ¿Cómo embebemos entonces un vídeo para los sujetos que o bien no tengan javascript o les apetezca empeorar notablemente su navegación desactivándolo?

1) Necesitamos la etiqueta object, que está permitida por este doctype y que además acepta la etiqueta param que contendrá los parámetros que necesitamos para mostrar el vídeo como queremos utilizando un reproductor específico.

<object id=”noscript” type=”application/x-shockwave-flash” data=”PLAYER” width=”405″ height=”261″>
<param name=”movie” value=”PLAYER” />
<param name=”allowFullScreen” value=”true” />
<param name=”allowScriptAccess” value=”always” />
<param name=”quality” value=”high” />
<param name=”FlashVars” value=”path=PATH&amp;file=FILE&amp;image=IMAGE” />
<param name=”pluginspage” value=”http://www.macromedia.com/go/getflashplayer&#8221; />
<param name=”wmode” value=”transparent” />
</object>

2) Tal como está, la película aparecerá siempre, se asume que debajo del vídeo cargado directamente mediante javascript. Tendremos que ocultarlo para quienes tengan javascript activado.

Nótese el id de la etiqueta object. “Noscript” es el id que utilizaremos mediante javascript para referirnos a esta etiqueta y ocultar el objeto en caso de que el usuario tenga javascript activado. Escribo el siguiente script de javascript en un nuevo documento llamado noscript.js.

/* noscript.js */

function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload !== “function”) {
window.onload = func;
} else {
window.onload = function () {
if (oldonload) {
oldonload();
}
func();
};
}
}
var noscript = addLoadEvent(noscript);
addLoadEvent(function () {
/* more code to run on page load */
});

function noscript()
{
if (document.removeChild)
{
var div = document.getElementById(“noscript”);
div.parentNode.removeChild(div);
}
else if (document.getElementById)
{
document.getElementById(“noscript”).style.display = “none”;
}
}

En la página donde vayamos a introducir el vídeo cargamos el archivo mediante la etiqueta script usual. De esta manera, en caso de que el usuario no tenga javascript activado pasarán dos cosas: el primer objeto cargado por javascript no se cargará, y el objeto descrito anteriormente no se ocultará. El reproductor se cargará en ambos casos y pasaremos la validación del doctype strict.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: