在网页中,javascript& as3的设置如下:
ExternalInterface.call("javascriptFunctionName", "");
javascriptFunctionName()
使用由ExternalInterface.addCallback设置的actionscript函数目前,javascriptFunctionName()
首先检查它是否可以访问actionscript的回调函数。
这项检查是否必要?或者,actionscript设法调用javascript函数的事实是否表明授予了访问权限?
编辑:更具体地说,我的代码有效。我担心它可能放在具有不同权限的第三方页面中。
答案 0 :(得分:8)
对于具有不同安全要求的JavaScript / Flash通信,有几种不同的方案。
SWF和HTML的协议和域匹配。
JavaScript可以与Flash通信。
如果参数allowScriptAccess
设置为"sameDomain"
(默认)或"always"
,则Flash可以与JavaScript通信。
SWF和HTML的域名不同。
如果从Flash调用Security.allowDomain(exactDomain)
或Security.allowDomain('*')
,则JavaScript可以与Flash通信。
如果参数allowScriptAccess
设置为"always"
SWF通过HTTPS提供,但HTML是通过HTTP提供的。
如果从Flash调用Security.allowInsecureDomain(exactDomain)
或Security.allowInsecureDomain('*')
,则JavaScript可以与Flash通信。
如果参数allowScriptAccess
设置为"always"
要回答您是否有必要检查通信是否正常的问题,如果您想立即显示错误消息,答案可能是肯定的。无论哪种方式,我都会在双方的每次通话中使用try..catch
。
答案 1 :(得分:2)
JS到AS3和AS3到JS是不同的行为,因为它在一个方向上工作,并不意味着它在相反的方向上工作。
要允许JS在SWF中调用AS3方法,您需要通过调用ExternalInterface.addCallback来注册每个AS3方法 - 对于您希望从JS调用的每个AS3方法一次。
假设你有一个像这样的AS3方法:
function myFunction(value:String):void
{
//do something here
}
首先需要注册:
//first parameter is name of function to use in JS.
//second parameter is the AS3 function itself.
ExternalInterface.addCallback("myAS3function", myFunction);
然后你可以从JS调用它;例如:
document.getElementById('mySWF').myAS3function("Hello World");