ExternalInterface在file协议下能否工作?

7

有人能确认ExternalInterface在file:协议上是否有效,或者指向一些说明它无法使用的文档吗?


1
离题:我使用XAMPP在本地调试Flash。 - zzzzBov
这不是用于测试,而是用于在 CD 上运行的代码。 - erikvold
好的,这很混乱,据我所知,navigateToURL文档似乎建议我在内部内容中使用ExternalInterface,这是什么鬼? - erikvold
嗯,他们一定是指我们应该在本地可信沙盒中使用ExternalInterface。 - erikvold
3个回答

8
看起来这样做可能行不通...此页面说:

在本地 HTML 文件和本地 SWF 文件之间进行双向脚本编写,例如使用 ExternalInterface 类,需要涉及的 HTML 文件和 SWF 文件都位于本地信任沙箱中。这是因为浏览器的本地安全模型与 Flash Player 的本地安全模型不同。

而对于本地信任沙箱,它的定义如下:

本地信任沙箱——已注册为受信任的本地 SWF 文件(由用户或安装程序注册)将放置在本地信任沙箱中。系统管理员和用户还可以根据安全考虑重新分配(移动)本地 SWF 文件到或从本地信任沙箱中(请参阅管理用户控件和用户控件)。分配给本地信任沙箱的 SWF 文件可以与任何其他 SWF 文件交互,并且可以从任何地方(远程或本地)加载数据。

所以,用户或安装程序必须将 swf 放入本地信任沙箱中。

1
请注意:此处提到了~hack。请参阅http://xs-sniper.com/blog/2011/01/04/bypassing-flash%E2%80%99s-local-with-filesystem-sandbox/。 - erikvold

3

默认情况下,如果从file://页面中尝试使用ExternalInterface,则会抛出Security Error #2060。但是,如果您向嵌入代码添加<param name="allowscriptaccess" value="always"/>选项,则应该能够与 JavaScript 通信。

ExternalInterface的文档在addCallback()和call()的异常文档中引用了这一点。

编辑:在下面的评论中进一步讨论后,似乎尽管此方法在我的 Mac 上有效,但它在 Windows 上无效。Erik 的答案提供了更多关于为什么会失败的细节。


那么使用<param name="allowscriptaccess" value="always"/>可以防止安全错误吗? - erikvold
是的,在我的经验中确实如此。文档中也提到了这一点,同时使用flash.system.Security.allowDomain(sourceDomain)(我在答案中更新了一个链接,请跳转到addCallback方法)。 - Nathan Ostgard
所以你在ActionScript中使用了flash.system.Security.allowDomain(sourceDomain),以便在file:上工作? - erikvold
ж‰Ђд»Ө我在扩展MovieClip的主类中执иҰЊдғ†import flash.system.Security;пәЊз„¶еђҺ我执иҰЊдғ†пәљSecurity.allowInsecureDomain("*");е’ЊSecurity.allowDomain("*");дҢ†иү™дәәд№ҺжІҰжњ‰иµ·е€°её®еЉ©дҢњз”ЁгЂ‚ - erikvold
1
啊...我在Mac上测试。我启动了Windows虚拟机,现在看到了你看到的东西:错误#2060。 - Nathan Ostgard
显示剩余4条评论

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接