javascript - ExternalInterface.call 有效,但 javascript 无法访问 actionscript 回调?

标签 javascript actionscript-3 actionscript

在网页中,javascript & as3 是这样设置的:

  1. Javascript 在页面中加载 swf。
  2. swf 调用 ExternalInterface.call("javascriptFunctionName", "");
  3. Javascript 的 javascriptFunctionName() 使用由 ExternalInterface.addCallback 设置的 actionscript 函数

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

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

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

最佳答案

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

  • SWF 和 HTML 的协议(protocol)和域匹配。

    JavaScript 可以与 Flash 通信。

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

    例如,http://example.com/a.swf载入 http://example.com/a.html

  • SWF 和 HTML 的域不同。

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

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

    例如,http://swf.example.com/a.swf载入 http://example.com/a.html

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

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

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

    例如,https://example.com/a.swf载入 http://example.com/a.html

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

关于javascript - ExternalInterface.call 有效,但 javascript 无法访问 actionscript 回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18298049/

相关文章:

javascript - vue.js: `vue create` 在项目文件夹中仅创建 3 个文件(package.json、package-lock.json、README.md)

javascript - 在javascript事件中播放声音

actionscript-3 - 在 AS3 中模拟点击事件

Flash 到 SignalR 通信

javascript - 在 Safari 移动版 (iPad) 上捕捉缩放事件

javascript - 添加两个 MySql 变量在一起,一个日期和一个数字与 php

flash - 本地定时器对象事件处理程序

apache-flex - Flex 错误 #1009 : Cannot access a property or method of a null object reference

audio - ActionScript 3中带有声音的快进和快退是否可行?

audio - 除了 Shine-MP3-Encoder 之外,还有用于 MP3 编码的 ActionScript 库吗?