3

在网页中,javascript & as3 的设置如下:

  1. Javascript 在页面中加载 swf。
  2. 瑞士法郎电话ExternalInterface.call("javascriptFunctionName", "");
  3. JavascriptjavascriptFunctionName()使用 ExternalInterface.addCallback 设置的 actionscript 函数

目前,javascriptFunctionName()首先检查它是否可以访问 actionscript 的回调函数。

这个检查有必要吗?或者 actionscript 设法调用 javascript 函数这一事实是否表明已授予访问权限?

编辑:更具体地说,我的代码有效。我担心它可能会放在具有不同权限的第三方页面中。

4

2 回答 2

8

具有不同安全要求的 JavaScript/Flash 通信有几种不同的场景。

  • SWF 和 HTML 的协议和域匹配。

    JavaScript 可以与 Flash 通信。

    allowScriptAccess如果参数设置为"sameDomain"(默认)或.Flash 可以与 JavaScript 通信"always"

    例如http://example.com/a.swf加载到http://example.com/a.html

  • SWF 和 HTML 的域不同。

    Security.allowDomain(exactDomain)如果或被Security.allowDomain('*')Flash 调用,JavaScript 可以与 Flash 通信。

    allowScriptAccess如果参数设置为Flash 可以与 JavaScript 通信"always"

    例如http://swf.example.com/a.swf加载到http://example.com/a.html

  • SWF 通过 HTTPS 提供,但 HTML 通过 HTTP 提供。

    Security.allowInsecureDomain(exactDomain)如果或被Security.allowInsecureDomain('*')Flash 调用,JavaScript 可以与 Flash 通信。

    allowScriptAccess如果参数设置为Flash 可以与 JavaScript 通信"always"

    例如https://example.com/a.swf加载到http://example.com/a.html

要回答您是否有必要检查通信是否正常的问题,如果您想立即显示错误消息,答案可能是肯定的。无论哪种方式,我都会try..catch在双方的每个通话中使用 a 。

于 2013-08-18T19:27:54.317 回答
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");
于 2013-08-18T14:44:43.567 回答