2011-09-19 16 views
5

La forma actualizada "moderna" para incrustar un objeto flash, según Adobe:Flash: ExternalInterface funciona con la etiqueta embed pero no con la etiqueta de objeto

 <object id="theFlash" name="theFlash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
     width="400" height="225" align="middle"> 
      <param name="movie" value="theflashfile.swf" /> 
      <param name="allowScriptAccess" value="always" /> 
      <!--[if !IE]>--> 
      <object type="application/x-shockwave-flash" 
      data="getStreamFrame.swf" width="400" height="225"> 
      <param name="allowScriptAccess" value="always" /> 
      <!--<![endif]--> 
      <a href="http://www.adobe.com/go/getflash"> 
       <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /> 
      </a> 
      <!--[if !IE]>--> 
      </object> 
      <!--<![endif]--> 
     </object> 

Al intentar llamar a una función de AS3 en el SWF, desde javascript:

 var flashObj = document.getElementById('theFlash'); 
    flashObj.someASFunction(); 

(y en el lado AS :)

 import flash.external.*; 
    function someASFunction() { 
     //show some text 
    } 
    ExternalInterface.addCallback("someASFunction", someASFunction); 

Este no funciona en Firefox y Chrome. El flash funciona y carga. flashObj obtiene una referencia al objeto, pero alguna función AS no está definida y no se llama.

Si se sustituye la etiqueta de objeto con una etiqueta embed:

<embed id="theFlash" name="theFlash" height="225" width="400" align="middle" 
    type="application/x-shockwave-flash" allowscriptaccess="always" 
    src="theflashfile.swf" /> 

Entonces funciona en Firefox y Chrome (la función como se llama y funciona correctamente) - (no funciona en IE aunque).

¿Cómo es que no funciona con una etiqueta de objeto?
¿Qué tan "seguro" es usar la etiqueta de inserción en lugar de la etiqueta de objeto? ¿No está obsoleto?

Tenga en cuenta que definitivamente no es un problema de tiempo - Si llamo a la función AS desde JS desde una función onclick - entonces los resultados son los mismos.

+1

no molestar con la incrustación estática, use swfobject! – grapefrukt

+0

La etiqueta de inserción se incluye en las especificaciones de HTML5. http://html5doctor.com/element-index/#e –

+0

Me encuentro con el mismo problema.Al usar swfobject 2.2, Chrome obtiene la etiqueta del objeto, y luego mi función AS no funciona. Si utilizo swfobject 1.5, Chrome obtiene la etiqueta de inserción y mi función AS funciona. Me gustaría usar el último swfobject, pero también necesito que mi función AS funcione. ¿Alguna actualización aquí? – Nick

Respuesta

1

de incrustación estática (que me gusta más) i utilizar este código (esto es para mi reproductor de mp3 invisible):

<object style="position:fixed" id="1pixPlayer" width="1" height="1" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"> 
    <param value="transparent" name="wmode"> 
    <param value="1pxMp3.swf" name="movie"> 
    <param value="always" name="allowScriptAccess"> 
<embed name="1pixPlayer" width="1" height="1" type="application/x-shockwave-flash" wmode="transparent" allowscriptaccess="always" src="1pxMp3.swf"></object> 
0

elemento de objeto es un control ActiveX, que sólo funciona en IE.

los browers estándar w3c utilizan la etiqueta de inserción en su lugar.

comúnmente, se debe crear un flash de la siguiente:

var fla, box = document.createElement("div"); 

    box.innerHTML = window.ActiveXObject? 
     "<object id='ID_XXX' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'><param name='movie' value='XXX.swf'></object>": 
     "<embed src='XXX.swf'></embed>"; 

    fla = box.firstChild; 
    document.body.appendChild(fla); 
+0

Ya no es cierto. Https://developer.mozilla.org/en-US/docs/HTML/Element/object –

4

Cuando se utiliza el método de Adobe recomienda, también falló para apuntar el flashmovie en FF y Chrome. Terminé usando el siguiente código y ExternalInterface funciona bien en todos los navegadores

<div id="flashContent"> 

     <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="619" height="99" id="myFlashMovie" align="middle"> 
      <param name="movie" value="myFlashMovie.swf" /> 
      <param name="quality" value="high" /> 
      <param name="bgcolor" value="#f2f2f2" /> 
      <param name="allowScriptAccess" value="sameDomain" /> 
      <!--[if !IE]>--> 
      <embed src="myFlashMovie.swf" quality="high" bgcolor="#f2f2f2" 
      width="619" height="99" name="myFlashMovie" align="middle" 
      play="true" loop="true" quality="high" allowScriptAccess="sameDomain" 
      type="application/x-shockwave-flash" 
      pluginspage="http://www.macromedia.com/go/getflashplayer"> 
     </embed> 
      <!--<![endif]--> 
     </object> 

Para la orientación de la película flash, yo uso este script java

 function sendDataToFlash(data) { 

      getFlashMovie("myFlashMovie").myCallbackInFlash(data); 

     } 

     function getFlashMovie(movieName) { 
      var isIE = navigator.appName.indexOf("Microsoft") != -1; 
      if(isIE) return window[movieName]; 
      else return document[movieName]; 

     } 
-1

Para mí que empiece a funcionar si le asigno una clara id a la etiqueta del objeto anidado y hacer llamadas a exactamente este objeto.

 <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" height="100%" id="launcher" 
       align="middle"> 
      <param name="movie" value="/flex-frontend/launcher.swf?version=1.3"/> 
      <param name="flashvars" 
        value="sessionId=${session.id}"/> 
      <param name="wmode" value="direct"/> 
      <param name="allowFullScreen" value="true"/> 
      <param name="bgcolor" value="#000000"/> 
      <!--[if !IE]>--> 
      <object type="application/x-shockwave-flash" id="launcher1" data="/flex-frontend/launcher.swf?version=1.3" 
        width="100%" height="100%"> 
       <param name="flashvars" 
         value="sessionId=${session.id}"/> 
       <param name="wmode" value="direct"/> 
       <param name="allowFullScreen" value="true"/> 
       <param name="bgcolor" value="#000000"/> 
       <!--<![endif]--> 
       <a href="http://www.adobe.com/go/getflash"> 
        Flash player version not less than 10.3 is required! 
       </a> 
       <!--[if !IE]>--> 
      </object> 
      <!--<![endif]--> 
     </object> 

Luego de javascript:

// This doesn't work 
// var flashObj = $("#launcher"); 
// But this does 
var flashObj = $("#launcher1"); 
var screenshotData = flashObj.get(0).exportScreenshot(); 

trabajo tanto para Chrome y FF.

Cuestiones relacionadas