javascript flash actionscript internet-explorer-9 externalinterface

javascript - Adobe ExternalInterface no funciona en IE9



flash actionscript (2)

He estado teniendo problemas similares, excepto que estaba trabajando en IE9 y no en IE7 / 8. Creo que la causa de ambos problemas es la misma. Lo resolví tropezando con este maravilloso artículo en A List: Apart http://www.alistapart.com/articles/flashsatay/

Después del artículo, su HTML correctamente formado debe leer:

<object type="application/x-shockwave-flash" data="/swf/movie.swf" width="1" height="1" id="MyMovie"> <param name="allowScriptAccess" value="always" /> <param name="movie" value="/swf/movie.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffcc00" /> </object>

En particular, tenga en cuenta que agregué un type y eliminé la etiqueta <embed> .

Por lo que puedo ver, ya no es necesario usar la etiqueta <embed> . Y eliminarlo significa que podemos usar un código mucho más simple para activar nuestra función ExternalInterface:

// After the flash object has loaded... var movie = document.getElementById(''MyMovie''); if (typeof movie.MyExternalFunction === ''function'') movie.MyExternalFunction();

Espero que esto ayude.

Estoy llamando a una función Actionscript desde JavaScript y funciona en todos los navegadores, excepto en IE9. Lo reduje a la función js que recupera el objeto de la película:

<script type="text/javascript"> var swf; ... function flashReady() // This is called from ActionScript { swf = getSWF("MyMovie"); swf.MyExternalFunction(); } function getSWF(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName]; } else { return document[movieName]; } } ... </script>

Aquí está mi HTML:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="1" height="1" id="MyMovie"> <param name="allowScriptAccess" value="always" /> <param name="movie" value="/swf/movie.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffcc00" /> <embed src="/swf/movie.swf" quality="high" bgcolor="#ffcc00" width="1" height="1" name="MyMovie" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object>

Cuando estoy llamando a la función externa de esta manera:

swf.MyExternalFunction();

En IE9 me sale un error JS:

"Object doesn''t support property or method ''MyExternalFunction''"

Aparentemente window [movieName], que era bueno para IE, no funciona en IE9 como solía hacerlo. ¿Alguna sugerencia?

:::ACTUALIZAR:::

Aquí está mi solución hasta ahora. Puede que no se vea bonito, pero funciona:

var movie = false; function initSWF(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { //alert("IE"); if (typeof (window[movieName].MyExternalFunction) == ''function'') { // alert("< IE9"); movie = window[movieName]; } else if (typeof (document[movieName].MyExternalFunction) == ''function'') { // alert(">= IE9"); movie = document[movieName]; } } else { // alert("NON IE"); movie = document[movieName]; } return ((movie) ? true : false); }

Entonces se usa como:

function flashReady() // This is called from ActionScript { if(initSwf("MyMovie")) { movie.MyExternalFunction(); } else { alert("Failed to initialize"); } }


He tenido exactamente el mismo problema con IE9, para mí, fue el caso de IE9 almacenando en caché el flash. Intente borrar el caché del navegador (f12 para herramientas de desarrollador y hay un ícono para borrar el caché o ctrl-R, creo), y luego darle una oportunidad de nuevo.

Si eso no funciona, intente depurar demorando su llamada javascript a actionscript por 1 o 2 segundos, algo parecido a esto:

<SCRIPT LANGUAGE=''Javascript''> function delayForFlash() { setTimeout("startFlash()", 1000); } function startFlash() { getFlashMovie("flashdemo").restartFlash(); } window.onload = function(){ delayForFlash();} </SCRIPT>

Esto es para dar tiempo suficiente para que su flash cargue todo.