2011-09-19 109 views
1

我正在使用Javascript調用嵌入在使用SWFObject的ASPX頁面中的Flash影片的方法。它在Firefox中正常工作,但Internet Explorer 7和8(迄今爲止)聲稱swfobject.getObjectById()返回的對象「不支持此屬性或方法」。我在這個網站和其他網站上發現了類似的帖子,但是我沒有試過在IE中修復過這個帖子。爲什麼Internet Explorer無法在ASPX中看到我的Flash ExternalInterface方法?

的ActionScript 3.0類:

public class Player extends MovieClip { 
    public function Player() 
    { 
     Security.allowDomain("http://localhost"); 
     ExternalInterface.addCallback("test", test); 
    } 

    public function test():void 
    { 
     debugBox.appendText("test() called successfully\n"); 
    } 
} 

ASPX標記:

<head runat="server"> 
    <script type="text/javascript" src="Scripts/swfobject.js"></script> 
    <script type="text/javascript"> 
    swfobject.registerObject("myPlayer", "9.0.0", "scripts/expressInstall.swf"); 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div class="movie"> 
    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="640" id="myPlayer"> 
     <param name="movie" value="Player.swf" /> 
     <param name="allowscriptaccess" value="always" /> 
     <!--[if !IE]>--> 
     <object type="application/x-shockwave-flash" data="Player.swf" width="640" height="640"> 
      <!--<![endif]--> 
      <a href="http://www.adobe.com/go/getflashplayer"> 
       <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> 
</div> 

而且沿ASPX標記,這是試圖讓Flash對象,並調用其test()方法的代碼正在發生在來自第三方組件(DevExpress ASPxHiddenField)的AJAX回調中。這個回調是由用戶輸入Flash動畫加載後觸發:

<dx:ASPxHiddenField ID="filenameHiddenField" runat="server" OnCustomCallback="filenameHiddenField_CustomCallback" 
     SyncWithServer="False"> 
     <ClientSideEvents EndCallback="function(s, e) {   
     var playerObject = swfobject.getObjectById(&quot;myPlayer&quot;); 
    playerObject.test(); 
}" /> 
</dx:ASPxHiddenField> 

Internet Explorer的抱怨在該函數的最後一行,「對象不支持此屬性或方法」。

謝謝!

+0

嘗試用實際引號字符替換URL編碼引號字符id參數。 –

+0

我相信這些引號需要轉義,因爲它們在EndCallback屬性中的一組雙引號內。試圖混淆Visual Studio設計器並導致IIS報告解析器錯誤。 –

+0

嘗試使用雙引號或加倍單引號。 –

回答

0

原來Capabilities.isDebugger()是罪魁禍首。我從我原來的職位省略此爲簡潔(因爲我覺得沒有辦法應該沒關係),但在我的ActionScript類的構造函數實際上看起來是這樣的:

public function Player() 
{ 
    Security.allowDomain("localhost"); 

    if (!Capabilities.isDebugger) 
    { 
     ExternalInterface.addCallback("test", test); 
    } 
} 

我添加了檢查,因爲ExternalInterface.addCallback()拋出「錯誤:錯誤#2067:ExternalInterface在此容器中不可用。ExternalInterface需要Internet Explorer ActiveX,Firefox,Mozilla 1.7.5或更高版本,或其他支持NPRuntime的瀏覽器。」當在Flash調試器中執行時。

顯然,Internet Explorer中的Flash播放器是一個調試版本; ExternalInterface.addCallback()從未被調用。

0

請參閱SWFObject's FAQ #7,它具體解決了這個問題。

+0

這看起來很有希望,但不幸的是它沒有工作。Firefox仍然可以正常工作,但Internet Explorer仍然有相同的錯誤。 –

0

ExternalInterface.addCallback應該在DOMContentLoaded中調用。

public function Player() 
{ 
    ... 

    setTimeout(regCallBack, 10); 
} 

private function regCallBack():void 
{ 
    ExternalInterface.call("test", test); 
} 
1

它看起來像你缺少在第二物體嵌入標籤,它是IE

相關問題