AS3 LoadPolicyFile函数是否也适用于远程swfs?

时间:2012-03-02 17:46:19

标签: actionscript-3 amazon-s3 flash cross-domain crossdomain.xml

我有一台swf one服务器从Amazon S3服务器提取内容。我现在已经设置了一个通用的跨域策略,允许所有域访问:

在包含swf的服务器上:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE cross-domain-policy SYSTEM
  "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*" />
</cross-domain-policy>

在S3服务器上:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE cross-domain-policy SYSTEM
  "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <site-control permitted-cross-domain-policies="master-only" />
  <allow-access-from domain="*" />
  <allow-http-request-headers-from domain="*" 
    headers="SOAPAction" />
</cross-domain-policy>

由于我的swf正在从S3服务器加载json,xml等文件,这些似乎很好地(大多数情况下)播放。什么正确的做法是从S3服务器加载swfs,当它尝试这样做时会抛出这个异常:

  

SecurityError:错误#2121:安全沙箱违规:   Loader.content:s3.amazonaws.com/bucket_name/swfs/foo.swf不能   访问s3.amazonaws.com/bucket_name/data/swfs/bar.swf。这可能是   通过调用Security.allowDomain来解决。

我认为这是因为远程swfs可能包含恶意可执行代码。我是否真的需要将allowDomain设置为某种东西,还是有其他“更正确”的方式允许我的swf加载其他远程swfs?

2 个答案:

答案 0 :(得分:0)

我在这里回答了类似的问题:

https://stackoverflow.com/a/9547996/579230

此外,如果您的crossdomain.xml已就位,则可以loaderContext.checkPolicyFile = true而不是明确加载文件。

答案 1 :(得分:0)

确保您使用存储桶名称作为策略文件加载和每个文件/ URL请求的子域。

解决方案:

http://onegiantmedia.com/cross-domain-policy-issues-with-flash-loading-remote-data-from-amazon-s3-cloud-storage