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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (127)

如何打开“跨域安全性”,以便页面上的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嵌入代码中设置allowScriptAccessalways允许SWF调用JavaScript函数

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

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

用户回答回答于

我在上一个答案中添加了一件事:如果你尝试上面的代码并且它不起作用,请检查你的网站的地址是否包含“www”。如果我把它写成,那么我没有也没有工作

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

我需要把它写成:

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

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励