我试图通过跨域的ExternalInterface启用Javascript和Flash之间的通信.当Javascript与SWF位于同一域时,它可以很好地工作.但在一种情况下,HTML驻留在域A上,javascript和flash都驻留在域B上.我已经完成了以下所有操作:
embed标签有allowScriptAccess="always"
(并且对象具有作为参数的对象)
我的SWF文件的actionscipt有 Security.allowDomain("*")
我的SWF也打来电话 Security.allowInsecureDomain("*")
域A和域B都有一个/crossdomain.xml
文件allow-access-from domain="*"
SWF能够在页面上调用javascript,但是当我使用Javascript来调用ExternalInterface公开的函数时,我得到了
在NPObject上调用方法时出错![插件异常:Actionscript中的错误.使用try/catch块查找错误.]
这是ActionScript 2所以ExternalInterface.marshallExceptions
不可用.
你应该只需要两件事就可以了:
1)allowscriptaccess=always
将允许您的SWF将内容发送到页面
2) System.security.allowDomain("yourhtmldomain.com");
请注意,它System.security.allowDomain()
在AS2中 - 它与AS3或您上面所写的内容不同.
上面的数字2允许domainA上的html页面调用domainB上的swf中的内容.
您的js托管的域在此处无关紧要,因为浏览器将其嵌入到domainA中,该脚本在domainA中执行.
crossdomain.xml主要用于加载你没有做的远程文件,所以你可以删除它,如果你愿意的话.(你可能不想让allow="*"
你的主域名有一个crossdomain.xml文件,这是非常糟糕的做法)