如何在JavaScript和Flash之间进行跨域通信?

Chr*_*aum 8 javascript security flash actionscript cross-domain

如何打开"跨域安全性",以便页面上的JavaScript可以自由地与SWF通信,即使这是在另一个域上托管的?

我确实知道默认情况下会阻止此函数通信,但是通过使用名为"crossdomain.xml"的文件和actionscript 3函数:system.Security.allowDomain("*").虽然我没有取得足够的成功,但我没有洞察力知道哪一个是开放的.

是否有其他隐藏的安全层,在这种情况下我需要考虑哪些?

我是否通过这种设置以某种方式为潜在的黑客开放我的代码?

(如果您想知道:是的,我必须在一个场景中进行此工作,其中html托管在一个域上,JavaScript从另一个域外部添加,而SWF由来自第三个域的JavaScript嵌入 - 不要问为什么,解释起来太复杂了 - 我也希望我能在一个域中托管整个事情.

Jos*_*ala 17

Security.allowDomain("www.example.com")在SWF中使用将允许来自www.example.com的页面中的JS调用SWF中公开的函数ExternalInterface.addCallback().域和子域必须完全匹配.使用"*"将允许任何域与SWF通信,但如果您有一个特定域,则最好使用它.

在HTML嵌入代码中设置allowScriptAccessalways允许SWF调用JavaScript函数.

捕获许多开发人员的一件事是,在SWF完成加载之前,JavaScript将无法调用SWF上的函数.不幸的是,没有基于JS的事件可以告诉你什么时候SWF准备好了(至少我发现了).我通常做的解决这个问题的方法是在SWF完成加载时立即从SWF调用JS函数,以通知页面SWF已准备就绪.

这里和那里有一些抽象,但如果你看一下YUI Charts的源代码,你或许可以弄明白Yahoo! 得到跨域JS/SWF通信工作.