在网页中,javascript & as3 是这样设置的:
- Javascript 在页面中加载 swf。
- swf 调用
ExternalInterface.call("javascriptFunctionName", "");
- Javascript 的
javascriptFunctionName()
使用由 ExternalInterface.addCallback 设置的 actionscript 函数
目前,javascriptFunctionName()
首先检查它是否有权访问 actionscript 的回调函数。
这个检查有必要吗?还是 actionscript 设法调用 javascript 函数这一事实表明已授予访问权限?
编辑:更具体地说,我的代码有效。我担心它可能会放在具有不同权限的第三方页面中。
最佳答案
JavaScript/Flash 通信有几种不同的场景,具有不同的安全要求。
SWF 和 HTML 的协议(protocol)和域匹配。
JavaScript 可以与 Flash 通信。
如果参数
allowScriptAccess
设置为"sameDomain"
(默认)或"always"
,Flash 可以与 JavaScript 通信。SWF 和 HTML 的域不同。
如果从 Flash 调用
Security.allowDomain(exactDomain)
或Security.allowDomain('*')
,JavaScript 可以与 Flash 通信。如果参数
allowScriptAccess
设置为"always"
,Flash 可以与 JavaScript 通信SWF 通过 HTTPS 提供,但 HTML 通过 HTTP 提供。
如果从 Flash 调用
Security.allowInsecureDomain(exactDomain)
或Security.allowInsecureDomain('*')
,JavaScript 可以与 Flash 通信。如果参数
allowScriptAccess
设置为"always"
,Flash 可以与 JavaScript 通信
要回答您是否有必要检查通信是否有效的问题,如果您想立即显示错误消息,答案可能是肯定的。无论哪种方式,我都会在双方的每个调用周围使用 try..catch
。
关于javascript - ExternalInterface.call 有效,但 javascript 无法访问 actionscript 回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18298049/