2010-02-25 80 views
2

我有一个flash应用坐在domainA中,需要加载来自Amazon S3存储桶的swf。 载入时出现以下错误。 "Error #2044: Unhandled securityError:. text=从AmazonS3加载swf - 跨域策略

我已经把桶中的一个跨域文件,并推测会做的伎俩。 我怎样才能解决这个问题?

+0

你有什么的'跨域。 xml'文件? – 2010-02-25 10:06:53

+0

允许所有域。 cross-domain-policy> Chin 2010-02-25 11:54:17

回答

9

您可以使用存储区名称DNS访问S3。所以,而不是s3.amazon.com/bucketname/filename它是bucketname.s3.amazon.com/filename。使用这种方法,你可以把自己的跨域文件的根路径

<allow-access-from domain="bucketname.s3.amazonaws.com" /> 

的更好的方法是你的DNS服务器上使用CNAME记录伪造根为您的跨域文件。例如

在您的DNS服务器上创建CNAME记录,将bucketname.yourdomainname.com指向bucketname.s3.amazon。COM

然后把你的跨域文件在水桶根

<allow-access-from domain="bucketname.yourdomainname.com" /> 

,并参考闪文件作为bucketname.yourdomainname.com/flash.swf等

+0

感谢,与CNAME变化去 - 工作一种享受。 – Chin 2010-03-03 00:06:06

0

你的跨域文件需要使用闪光灯的应用程序,是做服务器上加载,而不是它在加载文件,则指定S3域允许的域

<allow-access-from domain="s3.amazonaws.com" /> 

编辑:。好吧,我正式困惑

看来JB在对他的评论中是正确的,因为它错了。从here

每当Flash Player 7中检测 出的域数据加载请求, 玩家试图找到它试图 加载数据的服务器上的策略文件 。如果策略文件存在 ,并且授予访问制作 请求的Flash影片的原始域名 ,则操作成功。

但是,我们做我们的客户的网站之一这个确切的事情(将图像载入从远程亚马逊的服务器中的闪存组件),但我们crossdomain.xml文件是在加载Web服务器,亚马逊的根存储桶不包含任何策略文件。

那么我们的网站是如何工作的呢?根据文件,它不应该!

编辑2

按照沃特的评论,我做的是这可以解释为什么我的作品,即使我的跨域文件是放错了地方的特殊情况......

+1

我很确定你有这个倒退,crossdomain文件需要打开您正在从中加载数据的服务器,并且指定的域是swf文件所在的位置, – jcoder 2010-02-25 09:38:26

+0

谢谢,这是否需要在路径中。或者我可以将它放在与主应用程序相同的文件夹中? 非常感谢 – Chin 2010-02-25 09:38:57

+0

我想知道它是哪一种? – Chin 2010-02-25 09:40:56

1

加载swf文件与加载数据不完全相同。所以你可能需要的不仅仅是crossdomain.xml。要查看crossdomain.xml文件的位置,我建议使用“嗅探”工具(如httpfox)来查看Flash Player正在查找文件的位置。

要允许来自不同域的swf进行交互,还需要拨打Security.allowDomain。详细信息请参见the adobe docs on cross-scripting