如何打开"跨域安全性",以便页面上的JavaScript可以自由地与SWF通信,即使这是在另一个域上托管的?
我确实知道默认情况下会阻止此函数通信,但是通过使用名为"crossdomain.xml"的文件和actionscript 3函数:system.Security.allowDomain("*").虽然我没有取得足够的成功,但我没有洞察力知道哪一个是开放的.
是否有其他隐藏的安全层,在这种情况下我需要考虑哪些?
我是否通过这种设置以某种方式为潜在的黑客开放我的代码?
(如果您想知道:是的,我必须在一个场景中进行此工作,其中html托管在一个域上,JavaScript从另一个域外部添加,而SWF由来自第三个域的JavaScript嵌入 - 不要问为什么,解释起来太复杂了 - 我也希望我能在一个域中托管整个事情.
Security.allowDomain("www.example.com")
在SWF中使用将允许来自www.example.com的页面中的JS调用SWF中公开的函数ExternalInterface.addCallback()
.域和子域必须完全匹配.使用"*"
将允许任何域与SWF通信,但如果您有一个特定域,则最好使用它.
在HTML嵌入代码中设置allowScriptAccess
为always
允许SWF调用JavaScript函数.
捕获许多开发人员的一件事是,在SWF完成加载之前,JavaScript将无法调用SWF上的函数.不幸的是,没有基于JS的事件可以告诉你什么时候SWF准备好了(至少我发现了).我通常做的解决这个问题的方法是在SWF完成加载时立即从SWF调用JS函数,以通知页面SWF已准备就绪.
这里和那里有一些抽象,但如果你看一下YUI Charts的源代码,你或许可以弄明白Yahoo! 得到跨域JS/SWF通信工作.