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 何时可用