2011-09-19 43 views
5

「現代」更新方式嵌入Flash對象,據Adobe稱,:閃光:ExternalInterface的工作與嵌入標記,但不與對象標記

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

當試圖調用AS3功能的SWF,從使用Javascript:

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

(和在AS側:)

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

沒有在Firefox和Chrome中工作。 閃光燈工作並加載。 flashObj確實獲得了對象的引用,但是某些ASFunction是未定義的並且未被調用。

如果我有一個嵌入標記替換對象標籤:

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

然後在Firefox和Chrome 工作(AS功能被調用,並正常工作) - (它並不在IE瀏覽器雖然)。

它怎麼不能用對象標籤?
使用嵌入標籤而不是對象標籤有多「安全」?它沒有過時嗎?

請注意,它絕對不是一個計時問題 - 如果我從一個onclick函數調用JS的AS函數 - 那麼結果是一樣的。

+1

不用擔心靜態嵌入,請使用swfobject! – grapefrukt

+0

嵌入標籤包含在HTML5規範中。 http://html5doctor.com/element-index/#e –

+0

我遇到了同樣的問題。當使用swfobject 2.2時,Chrome獲取對象標記,然後我的AS功能不起作用。如果我使用swfobject 1.5,Chrome會獲取嵌入標記,並且我的AS功能可以工作。我想使用最新的swfobject,但我也需要使用我的AS功能。這裏有任何更新? – Nick

回答

1

靜態嵌入(我更喜歡)我用這個代碼(這個人是我的無形的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

對象元素是一個ActiveX控件,它只能在IE瀏覽器。

w3c標準瀏覽器改爲使用嵌入標籤。

通常,你應該建立一個像這樣的閃光:

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

不成立。https://developer.mozilla.org/zh-CN/docs/HTML/Element/object –

4

當使用推薦的Adobe的方法,我也沒能靶向FF和Chrome的flashmovie。最後我用下面的代碼和ExternalInterface的作品就好在所有瀏覽器

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

對於面向Flash影片,我用這個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

對我來說開始,如果我給你一個不同的工作id到嵌套的對象標籤並調用這個對象。

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

然後:

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

Chrome和FF工作。