2009-01-16 42 views
8

如何打开“跨域安全性”,以便页面上的JavaScript可以与SWF自由通信,即使该域名托管在另一个域上?如何进行JavaScript和Flash之间的跨域通信?

我确定默认情况下阻止了此函数通信,但是通过使用名为“crossdomain.xml”和actionscript 3函数:system.Security.allowDomain(“*”)的文件进行播放。尽管我没有取得全面的成功,但我也没有洞察力知道哪一个人开放了什么。

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

我是否可以通过这种设置打开潜在黑客的代码?

(如果您想知道:是的,我的可以在一个场景中进行此项工作,其中html托管在一个域中,JavaScript从另一个域外部添加,并且SWF由来自第三个域的JavaScript - 不要问为什么,这太复杂了,不能解释 - 我也希望我可以将整个东西托管在一个域中)。

回答

17

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

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

捕捉许多开发人员的一件事是,在SWF加载完成之前,JavaScript将无法调用SWF上的函数。不幸的是,没有基于JS的事件告诉你SWF何时准备好(至少我已经找到了)。我通常为解决此问题所做的工作是,当SWF完成加载以通知页面SWF已准备好时,立即从SWF调用JS函数。

这里和那里有一些抽象,但如果你看看YUI Charts的源代码,你可能会弄清楚Yahoo!获得跨域JS/SWF通信工作。

+0

我一直对什么似乎像小时搜索,这是迄今为止我遇到的最好的解释。谢谢你解释清楚! – zombat 2011-06-16 17:10:36

+0

非常感谢你 – simo 2014-04-30 05:48:09

1

我将添加到以前的答案的一件事:如果您尝试上述代码,并且它不起作用,请检查您的网站的地址是否包含“www”或不。矿井没有,没有,如果我写它作为

Security.allowDomain("www.jeremy-knight.com"); 

我需要把它写成工作:

Security.allowDomain("jeremy-knight.com"); 
相关问题