我有一个(自创)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下?
答案 0 :(得分:5)
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可以有三个值:
现在,调用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>