2011-09-19 5 views
5

„nowoczesnego” aktualizowana sposób osadzić obiektu Flash, zgodnie z Adobe:błysku: ExternalInterface współpracuje ze znacznika embed ale nie ze znacznika object

 <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> 

Podczas próby wywołania funkcji AS3 w SWF, z javascript:

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

(i na boku, jak :)

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

Ten nie działa w przeglądarkach Firefox i Chrome. Lampa błyskowa działa i ładuje się. flashObj otrzymuje odwołanie do obiektu, ale niektóre funkcje są niezdefiniowane i nie są wywoływane.

Gdybym zastąpić znacznik obiektu ze znacznika embed:

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

Potem działa na Firefox i Chrome (funkcja AS nazywa się i działa poprawnie) - (nie działa w IE chociaż).

Dlaczego to nie działa z tagiem obiektu?
Jak "bezpieczne" jest używanie tagu embed zamiast tagu object? Czy to nie jest przestarzałe?

Należy zauważyć, że nie jest to z pewnością kwestia ograniczenia czasu - jeśli wywołasz funkcję AS z JS z funkcji onclick - wyniki są takie same.

+1

nie przejmuj się statycznym osadzaniem, używaj swfobject! – grapefrukt

+0

Znacznik embed jest zawarty w specyfikacji HTML5. http://html5doctor.com/element-index/#e –

+0

Używam tego samego problemu.Podczas używania swfobject 2.2, Chrome pobiera znacznik object, a następnie moja funkcja AS nie działa. Jeśli używam swfobject 1.5, Chrome pobiera tag embed, a moja funkcja AS działa. Chciałbym użyć najnowszego swfobject, ale potrzebuję również mojej funkcji AS do pracy. Jakieś aktualizacje tutaj? – Nick

Odpowiedz

1

do osadzania statycznej (które lubię bardziej) i użyć tego kodu (ten jest dla mojego niewidzialnego odtwarzacz MP3):

<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

obiektu element jest kontrolka ActiveX, to działa tylko w IE.

Standardowe przeglądarki w3c używają tagu osadzania.

powszechnie, należy utworzyć błysk tak:

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

Nie jest już prawdą https://developer.mozilla.org/en-US/docs/HTML/Element/object –

4

Przy zastosowaniu zalecanej metody Adobe, ja też nie kierować flashmovie w FF i Chrome. Skończyło się za pomocą następującego kodu i ExternalInterface działa dobrze we wszystkich przeglądarkach

<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> 

do kierowania film flash Używam tego Java Script

 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

Dla mnie to zaczyna działać, jeśli przypisać odrębny id do znacznika zagnieżdżonego obiektu i wywoływać połączenia do dokładnie tego obiektu.

 <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> 

Następnie z javascript:

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

Praca zarówno dla Chrome i FF.

Powiązane problemy