我有一个位于domainA的flash应用程序需要加载来自Amazon S3存储桶的swf。
在加载时,我收到以下错误。 "Error #2044: Unhandled securityError:. text=
“
我已将一个跨域文件放入存储桶中并假设可以解决这个问题。 我该如何解决这个问题?
答案 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的评论,我正在做的是一个特殊情况,它解释了为什么它适用于我,即使我的跨域文件位于错误的位置......