闪存和跨域问题

时间:2010-11-14 21:45:32

标签: ruby-on-rails flash cross-domain

我正在运行一个带有外部资产主机的rails3项目,用于所有javascript,图像,swfs等。这是一个完全不同的域。所以知道我试图使用swfobject嵌入一些SWF。在开发中(同一主机)一切正常,但在生产(不同的主机)中它不启动闪存(firebug显示文件已加载但页面上没有任何内容)。我已将此crossdomain.xml文件放在资产主机的根目录中,但它根本不会改变任何内容。

http://my.host/crossdomain.xml

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>

http://my.host/swfs/sound1.swf http://my.host/swfs/video1.swf ...

我能做些什么才能让它发挥作用?我使用的SWF不是由我开发的,所以我不能改变它们。一些是简单的声音,另一些是视频和小“应用程序”。我不想让rails为swfs提供服务。

3 个答案:

答案 0 :(得分:2)

<allow-access-from domain="*"/>在最近的Flash版本中不起作用,您必须指定确切的域和端口,例如:

<cross-domain-policy>
   <site-control permitted-cross-domain-policies="all"/>
   <allow-access-from domain="my.host" to-ports="80,8080"/>
</cross-domain-policy>

当然,您应该将crossdomain.xml放入rails app公共目录的根目录中,而不是放在资产主机上。

答案 1 :(得分:1)

您的“内容”主机需要允许您从“资产”主机进行访问,而不是相反。

这是为了保护用户免受跨站点脚本的攻击,因此让拥有这些文件的主机决定他们是否可以访问它们都是倒退的。

答案 2 :(得分:0)

除上述答案之外(将crossdomain.xml放在请求主机上,而不是资产主机上)我必须将param allowcriptaccess:“always”添加到swfobject。否则无法启动闪存中的ExternalInterface。