can';无法让它工作:crossdomain.xml和Flash
我有一个(自行创建的)swf演示,按钮触发getUrl('SampleTargetPage.html') 现在我想把swf放在cdn的 cdn.example.com 而我的html页面位于www.example.com上 更结构化:can';无法让它工作:crossdomain.xml和Flash,flash,cross-domain,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就足够了
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?下。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>
找到了问题!
解决方案是在flash参数中将allowscriptaccess设置为“始终”:
allowscriptaccess : 'always'
这是关于这个问题的背景信息:
从FlashPlayer9开始,影响“\u self”、“\u parent”或“\u top”的getURL(或navigateToURL)调用被视为与托管HTML页面的交互。从Flash Player 9 update 3开始,对目标的所有呼叫(除“_blank”外)都会受到影响。这是为了防止嵌入在HTML页面中的不受信任的SWF文件重新导航浏览器页面(或该页面中的框架),而不会警告用户他们正在访问其他第三方网站。它还对所有html框架实施跨域脚本限制
为了保护HTML页面不受不受信任的SWF文件的影响,Flash Player在显示Flash内容的和标记中支持HTML参数AllowScriptAccess。AllowScriptAccess可以有三个值:
- “始终”:允许SWF文件在所有情况下与HTML页面交互
- “sameDomain”:仅当其域完全匹配时,才允许SWF文件与HTML页面交互。默认情况下,Adobe Flash创作应用程序中的HTML发布模板输出指定AllowScriptAccess=“sameDomain”的HTML,因为这通常是所需的安全行为
- “从不”:完全阻止SWF文件与HTML页面交互
这是Flash Player 9中引入的一种新行为,以符合安全模型,并影响所有SWF版本。Adobe意识到这可能会改变在Flash Player 9发布之前部署的某些SWF媒体的行为,对于由此造成的不便,我们深表歉意 如果flashplayer没有加载域策略,那么它与为什么链接不工作的策略无关。我是否正确地假设您正在尝试
getUrl('javascript:goToPage();')
,而不是getUrl(javascript:goToPage())
,因为您在帖子中输入了错误的内容?更改了原来的问题:我没有使用javascript,这只是一个普通的getUrl('test.hml')调用,无法跨域工作。(我错误地认为我在使用JS,对此表示抱歉)谢谢,但这对我并没有什么帮助。我有这样一个文件,但它不是由闪存请求。。。