如何打开“跨域安全”,以便页面上的JavaScript可以自由地与SWF通信,即使这是托管在另一个域上?
我可以肯定的是,这个函数通信在默认情况下是被阻止的,但是通过使用名为"crossdomain.xml“的文件和ActionScript3函数: system.Security.allowDomain("*")。但我并没有取得完全的成功,我也没有洞察力知道哪一个是为了什么而开放的。
在这个场景中,我还需要考虑其他隐藏的安全层吗?
我是不是通过这样的设置向潜在的黑客开放了我的代码?
(如果你想知道:是的,如果你想知道:是的,我有在这样的场景中工作,其中html托管在一个域上,JavaScript是从另一个域外部添加的,SWF是由来自第三个域的JavaScript嵌入的-不要问为什么,这太复杂了,解释起来太复杂了-我也希望我可以只在一个域中托管所有的东西)。
发布于 2009-01-16 23:53:40
在SWF中使用Security.allowDomain("www.example.com")
将允许www.example.com页面中的JS使用ExternalInterface.addCallback()
调用SWF中公开的函数。域和子域必须完全匹配。使用"*"
将允许任何域与SWF进行通信,但如果您有一个特定的域,最好使用该域。
在HTML代码中将allowScriptAccess
设置为always
将允许SWF调用JavaScript函数。
有一件事吸引了许多开发人员,那就是在SWF加载完成之前,JavaScript将无法调用SWF上的函数。不幸的是,没有基于JS的事件来告诉您SWF什么时候准备好了(至少我已经找到了)。为了解决这个问题,我通常会在SWF完成加载时立即从SWF调用JS函数,以通知页面SWF已准备就绪。
这里和那里有一些抽象,但是如果您看一下YUI Charts的源代码,您可能能够弄清楚雅虎!使跨域JS/SWF通信正常工作。
发布于 2012-06-30 06:50:04
在前面的回答中,我要补充一件事:如果你尝试上面的代码,但它不起作用,检查一下你的站点地址是否包含"www“。我的不起作用,如果我写成这样的话
Security.allowDomain("www.jeremy-knight.com");
我需要把它写成:
Security.allowDomain("jeremy-knight.com");
https://stackoverflow.com/questions/452415
复制相似问题