javascript - swfobject.embedSWF no funciona?
html5 (2)
Chrome desde la versión 55 no inicializa las variables que swfobject necesita para detectar si Flash está instalado. Puede aplicar un parche primitivo a swfobject js para omitir la verificación hasPlayerVersion:
- if (hasPlayerVersion(swfVersionStr)) { // create SWF
+ try { // create SWF
var obj = createSWF(att, par, replaceElemIdStr);
if (att.id == replaceElemIdStr) {
setVisibility(replaceElemIdStr, true);
}
callbackObj.success = true;
callbackObj.ref = obj;
- }
- else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install
- att.data = xiSwfUrlStr;
- showExpressInstall(att, par, replaceElemIdStr, callbackFn);
- return;
- }
- else { // show alternative content
+ } catch (e) { // show alternative content
setVisibility(replaceElemIdStr, true);
}
El siguiente código que incorpora una animación Flash en un documento HTML utilizando SWFObject muestra solo el contenido alternativo. ¿Por qué?
<!DOCTYPE html>
<html>
<head>
<title>Adding a Flash Movie</title>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js">
</script>
<script type="text/javascript">
swfobject.embedSWF("flash/bird.swf", "bird", "400", "300", "8.0.0");
</script>
</head>
<body>
<div id="bird">
<p>An animation of a bird taking a shower</p>
</div>
</body>
</html>
Chrome, IE y Firefox muestran solo
An animation of a bird taking a shower
.
El código es una muestra del libro HTML y CSS: diseña y crea sitios web .
SWFObject 2.2 ya no funciona correctamente. El error en SWFObject ya se ha informado en GitHub, pero la biblioteca no se mantiene.
La nueva política de Flash "HTML por defecto" que comienza en Chrome 55 no inicializa las variables que SWFObject usa para detectar si Flash está instalado.
Específicamente,
navigator.mimeTypes
ya no contiene
application/x-shockwave-flash
, a menos que el usuario habilite Flash.
Otros navegadores tienen problemas similares relacionados con el
esquema de activación de clic para ejecutar
introducido como parte del
final de la vida útil
de
Flash
.
En este momento, el mejor curso de acción puede ser simplemente usar
<object>
para incrustar Flash.
Por ejemplo:
<object type="application/x-shockwave-flash" data="app.swf">
<param name=''movie'' value="app.swf"/>
<param name=''bgcolor'' value="#999999"/>
<param name=''FlashVars'' value="var1=Hello&var2=Goodbye" />
<param name=''allowscriptaccess'' value="sameDomain"/>
</object>
Tenga en cuenta que (1) el .swf se especifica en dos lugares (2) solo se requiere el parámetro de
movie
;
Los otros parámetros se muestran aquí como un ejemplo de lo que es posible.