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

时间:2012-09-27 09:13:07

标签: actionscript-3 externalinterface

import flash.external.ExternalInterface;
var pageURL:String = ExternalInterface.call('window.location.href.toString');

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

任何提示?

2 个答案:

答案 0 :(得分:5)

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

if(ExternalInterface.available)
{
  ExternalInterface.call('window.location.href.toString');
}

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

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

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

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

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

答案 1 :(得分:5)

在IE9中不起作用

if(ExternalInterface.available)
{
  ExternalInterface.call('window.location.href.toString');
}

无处不在

if(ExternalInterface.available)
{
  ExternalInterface.call('document.location.href.toString');
}