从AmazonS3加载swf - 跨域策略

时间:2010-02-25 09:20:07

标签: flex actionscript-3 flash crossdomain.xml

我有一个位于domainA的flash应用程序需要加载来自Amazon S3存储桶的swf。 在加载时,我收到以下错误。 "Error #2044: Unhandled securityError:. text=

我已将一个跨域文件放入存储桶中并假设可以解决这个问题。 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:9)

您可以使用存储桶名称DNS访问S3。因此,它不是s3.amazon.com/bucketname/filename,而是bucketname.s3.amazon.com/filename。使用此方法,您可以将自己的跨域文件放在根路径

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

更好的方法是在DNS服务器上使用CNAME记录伪造您的跨域文件的根目录。 e.g。

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

然后将您的跨域文件放在该存储桶根目录

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

并将flash文件称为bucketname.yourdomainname.com/flash.swf等

答案 1 :(得分:1)

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

要允许来自不同域的swf进行交互,您还需要调用Security.allowDomain。有关详细信息,请参阅the adobe docs on cross-scripting

答案 2 :(得分:0)

您的跨域文件需要在服务器上使用进行加载的Flash应用程序,而不是加载的文件。然后您将S3域指定为允许的域。

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

编辑:好的,我正式感到困惑。

看起来JB在他的评论中是正确的,因为我的方法是错误的。来自here

  

每当Flash Player 7检测到   域外数据加载请求,   播放器尝试查找策略文件   在它尝试的服务器上   加载数据。如果存在策略文件   它授予访问原点的权限   Flash电影制作的领域   请求,然后操作成功。

但是,我们在其中一个客户端网站上执行此操作(将图像从远程Amazon服务器加载到闪存组件中),但我们的crossdomain.xml文件位于加载Web服务器的根目录中 - 亚马逊存储桶不包含任何策略文件。

那么我们的网站如何运作?根据文档,它不应该!

修改2

根据Wouter的评论,我正在做的是一个特殊情况,它解释了为什么它适用于我,即使我的跨域文件位于错误的位置......