无法让它工作:crossdomain.xml和Flash

时间:2010-06-28 14:14:46

标签: flash cross-domain

我有一个(自创)swf演示,按钮触发getUrl('SampleTargetPage.html')

现在我想将swf放在我们的cdn处 cdn.example.com 我的html页面位于www.example.com

更有条理:

www.example.com/test.html
cdn.example.com/someflash.swf
cdn.example.com/crossdomain.xml

我认为在cdn.example.com上提供crossdomain.xml以允许链接工作就足够了。但是:似乎Flash插件根本不会查询crossdomain.xml!

现在,我必须在SWF中添加一些内容才能使其工作吗?非常感谢!

编辑:我需要使用Security.loadPolicyFile吗? 编辑:也许我根本不需要crossdomain.xml,因为所有内容都在* .example.com下?

2 个答案:

答案 0 :(得分:5)

发现问题了! 解决方案是在flash参数中将allowscriptaccess设置为“always”:

 allowscriptaccess : 'always'

这是关于这个问题的背景信息:

从Flash Player 9开始,影响“_self”,“_ parent”或“_top”的getURL(或navigateToURL)调用被视为与托管HTML页面的交互。从Flash Player 9更新3开始,对“_blank”以外的目标的所有调用都会受到影响。这是为了防止嵌入在HTML页面中的不受信任的SWF文件重新导航浏览器页面(或该页面中的框架),而不会警告用户他们现在正在访问不同的第三方网站。它还对所有html框架强制实施跨域脚本限制。

为了保护HTML页面免受不受信任的SWF文件的影响,Flash Player支持显示Flash内容的标记和标记中的HTML参数AllowScriptAccess。 AllowScriptAccess可以有三个值:

  • “always”:允许SWF文件在所有情况下与HTML页面进行交互。
  • “sameDomain”:允许SWF文件仅在其域完全匹配时才与HTML页面进行交互。默认情况下,Adobe Flash创作应用程序中的HTML发布模板输出HTML,指定允许来自此类的“相同域”,因为这通常是所需的安全行为。
  • “never”:完全阻止SWF文件与HTML页面交互。

现在,调用getURL(或navigateToURL)受AllowScriptAccess参数的控制。换句话说,AllowScriptAccess必须是“always”或“sameDomain”,并且HTML页面和SWF文件的域必须完全匹配。否则,对getURL(或navigateToURL)的调用将失败。

这是Flash Player 9中引入的新行为,以符合安全模型并影响所有SWF版本。 Adobe意识到这可能会改变在Flash Player 9发布之前部署的某些SWF媒体的行为,对于由此带来的任何不便,我们深表歉意。

答案 1 :(得分:0)

crossdomain.xml文件应位于站点的根目录下,并列出所有可访问其中文件的域。如果需要,您还可以将文件设置为允许全部。

请注意,在下面的示例中,我使用了通配符(*)而不是子域,因此我可以访问属于我的主域的所有子域。前两个条目只是特定外部站点的示例,如果您想要限制它。但你总是可以做一个。*来允许所有。

内容如下:

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