ExternalInterface 是不是适用于文件:协议?

Posted

技术标签:

【中文标题】ExternalInterface 是不是适用于文件:协议?【英文标题】:Does ExternalInterface work on the file: protocol?ExternalInterface 是否适用于文件:协议? 【发布时间】:2011-07-11 14:59:29 【问题描述】:

任何人都可以确认 ExternalInterface 在file: 协议上工作,或者指出一些文档说它不会?

【问题讨论】:

题外话:我使用 XAMPP “本地”调试闪存 这不是用于测试的,它是用于将在 cd 上运行的代码 好吧,这搞砸了,navigateToURL 上的文档似乎建议我应该将 ExternalInterface 用于内部内容 WTF? 嗯,他们一定意味着我们应该为本地受信任的沙箱使用 ExternalInterface.. 【参考方案1】:

作为替代方案,您是否考虑过使用 Air 并利用“文件系统”?

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/File.html

【讨论】:

【参考方案2】:

默认情况下,如果您尝试从 file:// 页面使用 ExternalInterface,它将引发安全错误 #2060。但是,如果您将 <param name="allowscriptaccess" value="always"/> 选项添加到您的嵌入,它应该能够与 javascript 对话。

docs on ExternalInterface 在 addCallback() 和 call() 的异常文档中引用了这个。

编辑:在下面的 cmets 中进一步讨论后,看来,虽然这在 Mac 上适用于我,但在 Windows 上不起作用。 Erik 的回答详细说明了失败的原因。

【讨论】:

所以使用<param name="allowscriptaccess" value="always"/> 可以防止安全错误? 是的,根据我的经验。文档引用了这个,以及使用flash.system.Security.allowDomain(sourceDomain)(用链接更新了我的答案,跳到 addCallback 方法)。 所以你在动作脚本中使用了flash.system.Security.allowDomain(sourceDomain),以便在file:上工作? 在使用file: 协议时,您对sourceDomain 使用了什么顺便说一句? 啊...我在 Mac 上进行测试。我启动了 Windows VM,我看到了您所看到的:错误 #2060。【参考方案3】:

开始看起来这行不通了。this page 说:

脚本之间的任一方向 本地 HTML 文件和本地 SWF 文件——例如,使用 ExternalInterface 类——要求 HTML 文件和 SWF 文件 参与当地值得信赖的 沙盒。这是因为当地 浏览器的安全模型不同 从 Flash Player 本地安全 型号。

这就是它对本地可信沙箱的描述:

本地受信任的沙盒--本地 SWF 注册为受信任的文件 (由用户或安装程序) 被放置在本地信任的 沙盒。系统管理员和 用户也有能力 将本地 SWF 文件重新分配(移动)到或 从基于本地受信任的沙箱 关于安全考虑(见 管理用户控制和用户 控制)。分配的 SWF 文件 到本地信任的沙箱可以 与任何其他 SWF 文件交互并 可以从任何地方加载数据(远程或 本地)。

因此,安装程序或用户都必须将 swf 放入本地受信任的沙箱中。..

【讨论】:

注意:~hack 提到了here

以上是关于ExternalInterface 是不是适用于文件:协议?的主要内容,如果未能解决你的问题,请参考以下文章

Java 中是不是有用于文本分析/挖掘的 API? [关闭]

Actionscript 3 ExternalInterface,将变量传递给javascript?

Flash AS2.0 与 JavaScript/jQuery (ExternalInterface) 通信

隐藏和显示 swf 时如何判断 ExternalInterface 何时可用

AS2 ExternalInterface:错误:引发了无效异常

ExternalInterface 为我提供了在使用多个参数时停止脚本的选项。为啥?