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

hug*_*gri 3 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

hug*_*gri 5

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

 allowscriptaccess : 'always'
Run Code Online (Sandbox Code Playgroud)

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

从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,该HTML指定了UseScriptAccess ="sameDomain",因为这通常是所需的安全行为.
  • "never":完全阻止SWF文件与HTML页面交互.

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

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