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下?
发现问题了!解决方案是在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可以有三个值:
现在,调用getURL(或navigateToURL)受AllowScriptAccess参数的控制.换句话说,AllowScriptAccess必须是"always"或"sameDomain",并且HTML页面和SWF文件的域必须完全匹配.否则,对getURL(或navigateToURL)的调用将失败.
这是Flash Player 9中引入的新行为,以符合安全模型并影响所有SWF版本.Adobe意识到这可能会改变在Flash Player 9发布之前部署的某些SWF媒体的行为,对于由此带来的任何不便,我们深表歉意.