AS3 ExternalInterface.call,为什么它不适用于Chrome或IE?

kan*_*nte 1 actionscript-3 externalinterface

import flash.external.ExternalInterface;
var pageURL:String = ExternalInterface.call('window.location.href.toString');
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎适用于Firefox,但是当我尝试使用Chrome或IE时它不起作用(它会导致错误并停止swf的执行).

任何提示?

Jud*_*her 5

ExternalInterface适用于所有主流浏览器的最新版本.您应该做的第一件事是将该调用包装在一个检查中以查看它当前是否可用:

if(ExternalInterface.available)
{
  ExternalInterface.call('window.location.href.toString');
}
Run Code Online (Sandbox Code Playgroud)

Chrome和IE的问题可能是对window.location.href的调用.最好的办法是将它放入JS函数中,然后从AS调用该函数,如下所示:

//JS:

function reportHref(){
    return window.location.href.toString(); 
    // I'm not sure this is good cross-browser JS. 
    // If it isn't, you can at least test it directly in the browser
    // and get a javascript error that you can work on.
}

//AS:
var result:String = "";
if(ExternalInterface.available)
{
    result = ExternalInterface.call("reportHref");
}
else
{
    result = "External Interface unavailable";
}
trace(result);
Run Code Online (Sandbox Code Playgroud)

此外,在尝试调用之前,请确保您尝试调用的函数已经存在于DOM中 - 如果在添加脚本之前添加SWF并ExternalInterface立即调用,那么它将失败,因为reportHref它不会还存在.

最后,从SWF到window.location对象的调用可能会因沙盒而失败,如果您从页面中的JS函数调用,则不会出现这种情况.

这些文档ExternalInterface非常全面,有很好的例子:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html


小智 5

在IE9中不起作用

if(ExternalInterface.available)
{
  ExternalInterface.call('window.location.href.toString');
}
Run Code Online (Sandbox Code Playgroud)

无处不在

if(ExternalInterface.available)
{
  ExternalInterface.call('document.location.href.toString');
}
Run Code Online (Sandbox Code Playgroud)