为什么Internet Explorer在ASPX中看不到我的Flash ExternalInterface方法

Why does Internet Explorer fail to see my Flash ExternalInterface method in ASPX?

本文关键字:我的 Flash ExternalInterface 方法 看不到 Internet Explorer ASPX 为什么      更新时间:2023-09-26

我正在使用Javascript调用一个方法,该方法使用SWFObject嵌入ASPX页面中的Flash电影中。它在Firefox中运行良好,但InternetExplorer7和8(到目前为止(声称swfobject.getObjectById()返回的对象"不支持此属性或方法"。我在这个网站和其他网站上发现了类似的帖子,但我没有尝试过在IE中修复这个问题。

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抱怨该函数的最后一行"对象不支持此属性或方法"。

谢谢!

第二个对象嵌入标记中似乎缺少用于IE 的id参数

请参阅SWFObject的常见问题解答#7,它专门解决了这个问题。

事实证明Capability.isDebugger((是罪魁祸首。为了简洁起见,我在最初的帖子中省略了这一点(因为我认为这不重要(,但ActionScript类中的构造函数实际上看起来是这样的:

public function Player()
{
    Security.allowDomain("localhost");
    if (!Capabilities.isDebugger)
    {
        ExternalInterface.addCallback("test", test);
    }
}

我添加该检查是因为ExternalInterface.addCallback()在Flash调试器中执行时抛出"错误:错误#2067:ExternalInterface在此容器中不可用。ExternalInterface需要Internet Explorer ActiveX、Firefox、Mozilla 1.7.5及更高版本,或其他支持NPRuntime的浏览器。"。

很明显,InternetExplorer中的Flash播放器是一个调试版本;ExternalInterface.addCallback()从未接到电话。