【发布时间】:2011-03-12 04:57:01
【问题描述】:
当 html 文件和 swf 文件都使用 file: 协议时,我正在尝试从 actionscript 执行类似 window.alert 的函数。
有人知道怎么做吗?
无需更改全局闪存安全设置
【问题讨论】:
标签: javascript flash actionscript local
当 html 文件和 swf 文件都使用 file: 协议时,我正在尝试从 actionscript 执行类似 window.alert 的函数。
有人知道怎么做吗?
无需更改全局闪存安全设置
【问题讨论】:
标签: javascript flash actionscript local
看了Controlling access to scripts in a host web page之后好像不行。
对于在本地运行的 SWF 文件,仅当 SWF 文件和包含网页(如果有)位于本地受信任的安全沙箱中时,对这些 API 的调用才会成功。如果内容在 local-with-networking 或 local-with-filesystem 沙箱中,则对这些方法的调用会失败。
然后,本地沙箱上的this page 基本上说除非 swf 位于用户或安装程序需要将其放入的“本地受信任的沙箱”中,否则它将无法正常工作。
This blog post 关于“本地文件系统沙箱”说:
首先,我认为这里的文档有点过于慷慨了。从本地文件系统加载的 SWF 确实面临一些限制。最相关的限制可能是:
- SWF 无法通过 URL 或 ExternalInterface 调用 JavaScript(或 vbscript)
- SWF 无法调用 HTTP 或 HTTPS 请求。
- 查询字符串参数(例如 Blah.php?querystring=qs-value)被剥离并且不会被传递(即使是对本地文件的请求)
【讨论】:
有一个文档“Controlling access to scripts in a host web page”描述了允许 Flash 内容与 Javascript 交互的各种方式和限制。
根据文档,只要您的嵌入标签包含设置为“始终”的 AllowScriptAccess,无论页面从何处加载,您都应该没问题。
【讨论】:
allowScriptAccess="always",域将无关紧要,但在此之前它说“对于本地运行的 SWF 文件,只有当 SWF 文件和包含的网页(如果有)在本地信任的安全沙箱中。如果内容在本地网络或本地文件系统沙箱中,则对这些方法的调用将失败。所以我认为这是不可能的。
您需要更新Flash Player settings,以便将您的文件路径列为“受信任的位置”。然后您将能够使用外部接口和其他 JS 通信方法。
此外,您不能使用外部接口(如 alert)从 AS 传递默认的 JS 函数。您需要编写自定义函数...
动作脚本:
import flash.external.ExternalInterface;
ExternalInterface.call("alertFromFlash", 'hello');
JavaScript:
function alertFromFlash(str) {
alert(str);
}
或者,如果您将其分发给客户。解释如何更改 Flash Player 设置可能很困难,因此您可以改为从 CD 运行服务器,从而绕过安全设置的需要。我过去在Flying Ant server 上运气不错。
【讨论】: