2011-09-19 185 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

相关问题