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

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

有什么提示吗?

4

2 回答 2

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

于 2012-09-27T09:16:38.537 回答
5

不能在 IE9 中工作

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

无处不在

if(ExternalInterface.available)
{
  ExternalInterface.call('document.location.href.toString');
}
于 2012-12-23T00:19:54.560 回答