代码之家  ›  专栏  ›  技术社区  ›  gucki

flash与跨域问题

  •  2
  • gucki  · 技术社区  · 15 年前

    我正在运行一个rails3项目,它有一个用于所有javascript、图像、swfs等的外部资产主机,这是在一个完全不同的域上。所以我试着用swfobject嵌入一些swf。在开发(同一个主机)中,一切正常,但在生产(不同的主机)中,它不会启动flash(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网站 ...

    我能做什么让它工作?我使用的主权财富基金不是我开发的,所以我不能改变它们。一些是简单的声音,另一些是视频和小的“应用程序”。我不想让铁轨为主权财富基金服务。

    3 回复  |  直到 15 年前
        1
  •  1
  •   grapefrukt    15 年前

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

    这是为了保护用户不受跨站点脚本编写的影响,因此让保存文件的主机决定他们是否可以访问将是一个倒退。

        2
  •  2
  •   buru    15 年前

    <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应用程序公共目录的根目录中,而不是放在资产主机上。

        3
  •  0
  •   gucki    15 年前

    除了上面的答案(将crossdomain.xml放在请求主机上,而不是资产主机上)之外,我还必须将param allowscriptaccess:“always”添加到swfobject。否则无法启动flash中的外部接口。