Apache flex 从AmazonS3加载swf-跨域策略
我有一个flash应用程序位于domainA,它需要加载一个来自Amazon S3 bucket的swf。 在加载时,我得到以下错误<代码>“错误#2044:未处理的安全性错误:。文本=” 我已经把一个跨域文件放进了存储桶,并假设这样就可以了。Apache flex 从AmazonS3加载swf-跨域策略,apache-flex,actionscript-3,flash,crossdomain.xml,Apache Flex,Actionscript 3,Flash,Crossdomain.xml,我有一个flash应用程序位于domainA,它需要加载一个来自Amazon S3 bucket的swf。 在加载时,我得到以下错误“错误#2044:未处理的安全性错误:。文本=” 我已经把一个跨域文件放进了存储桶,并假设这样就可以了。 如何修复此问题?您的跨域文件需要位于正在加载的flash应用程序的服务器上,而不是加载的文件。然后将S3域指定为允许的域 <allow-access-from domain="s3.amazonaws.com" /> : 每当Flash Playe
如何修复此问题?您的跨域文件需要位于正在加载的flash应用程序的服务器上,而不是加载的文件。然后将S3域指定为允许的域
<allow-access-from domain="s3.amazonaws.com" />
:
每当Flash Player 7检测到
域外数据加载请求,
播放机尝试查找策略文件
在尝试从中删除的服务器上
加载数据。如果存在策略文件
它允许访问源代码
制作动画的Flash电影的领域
请求,则操作成功
然而,我们在我们的一个客户端网站上做了同样的事情(从远程Amazon服务器将图像加载到flash组件中),但是我们的crossdomain.xml
文件位于加载web服务器的根目录中。Amazon bucket不包含任何策略文件
那么我们的网站是如何运作的呢?根据文件,它不应该
编辑2
根据Wouter的评论,我所做的是一个特例,它解释了为什么即使我的跨域文件位于错误的位置,它对我仍然有效…加载swf文件与加载数据并不完全相同。因此,您可能需要的不仅仅是crossdomain.xml。要查看crossdomain.xml文件的查找位置,我建议使用“嗅探”工具(如httpfox)查看Flash播放器查找该文件的位置
要允许来自不同域的swf进行交互,还需要调用Security.allowDomain
。有关详细信息,请参阅。您可以使用bucket name 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等我很确定您已经了解了这一点,跨域文件需要位于加载数据的服务器上,并且指定的域是swf文件的来源,谢谢,这是否需要在路由中。或者我可以把它和主应用程序放在同一个文件夹中吗?非常感谢它需要位于站点根AFAIK中。@JB如果crossdomain.xml
文件与要加载的资产位于远程服务器上,那么由于相同的安全限制,执行加载的SWF永远无法访问它。图像是Flash Player中的一种特殊情况:可以显示不同域的图像(即使没有crossdomain.xml),但不能访问其中的位图数据。(这在中提到)您在crossdomain.xml
文件中有什么?允许所有域。跨域策略>