2

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

我已经在存储桶中放置了一个跨域文件,并认为这可以解决问题。我怎样才能解决这个问题?

4

3 回答 3

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 等

于 2010-02-25T10:36:59.600 回答
1

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

要允许来自不同域的 swf 进行交互,您还需要调用Security.allowDomain. 有关详细信息,请参阅有关跨脚本的 adobe 文档

于 2010-02-25T10:16:56.107 回答
0

您的跨域文件需要与正在加载的 Flash 应用程序一起位于服务器上,而不是与加载的文件一起位于服务器上。然后您将 S3 域指定为允许的域。

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

编辑:好的,我很困惑。

看来 JB 的评论是对的,他说我把它弄错了。从这里

每当 Flash Player 7 检测到域外数据加载请求时,播放器都会尝试在服务器上查找它尝试从中加载数据的策略文件。如果存在策略文件并且它授予对发出请求的 Flash 电影的源域的访问权限,则操作成功。

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

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

编辑 2

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

于 2010-02-25T09:28:23.347 回答