【问题标题】:AS3 Cross-domain ErrorAS3 跨域错误
【发布时间】:2011-06-17 13:18:31
【问题描述】:

我有一个 SWF 文件,假设 myserver1.com/my.swf 我有一个跨域文件

<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from domain="*.imageDomain1.com" />
<allow-access-from domain="*.AnotherimageDomain1.com" />
<allow-access-from domain="*.imageDomain2.com" />
</cross-domain-policy>

ActionScript 代码是。

Security.loadPolicyFile("http://myserver1.com/crossdomain.xml");
var context:LoaderContext = new LoaderContext();
context.checkPolicyFile = true;

// The following is working (SESSION 1)
var request:URLRequest = new URLRequest('http://img.imageDomain1.com/firstImage.jpg');
var loader:Loader = new Loader();
loader.load(request, context);

// The following is not working (SESSION 2)
var request1:URLRequest = new URLRequest('http://img.AnotherimageDomain1.com/firstImage.jpg');
var loader1:Loader = new Loader();
loader1.load(request1, context);

我不知道发生了什么。当我使用 Firebug 时,swf 正在寻找 http://img.imageDomain1.com/crossdomain.xml 它存在于那里。但是http://img.AnotherimageDomain1.com/crossdomain.xml 不存在(我无法将任何 corssdomain 文件放在那里,因为我没有任何访问权限)。

问题是来自 (SESSION 1) 的图像正在调整大小,而来自 (SESSION 2) 的图像没有在 COMPLETE 事件上调整大小。

请帮帮我!!!

【问题讨论】:

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


    【解决方案1】:

    如果您无权访问http://img.AnotherimageDomain1.com/,那么您将永远无法将 crossdomain.xml 放在那里。
    因此可以预期您当前的解决方案将无法应对沙盒问题。

    解决方案是您需要创建一个proxy
    代理应该在http://img.imageDomain1.com/ 的公共根目录中可用,这是您可以访问的域。

    由于代理将与您的应用程序在同一域中运行,因此它将充当中间人,为您的应用程序提供来自其自身域之外的数据,从而有效地绕过沙箱。

    请记住,您应该限制您的代理,否则您的网站可能容易受到 XSS 攻击。

    干杯

    【讨论】:

    • 很好的答案丹尼斯,但也许您的意思是“代理应该在img.imageDomain1.com 可用”而不是“代理应该在img.imageDomain1.com/crossdomain.xml 可用”?换句话说,代理需要在可以放置 crossdomain.xml 的服务器上运行,或者在加载 swf 的同一域上运行(不需要 crossdomain.xml)。
    • @Lars,确实你是对的。应该在这个上使用 CPD:p
    猜你喜欢
    • 2016-11-17
    • 2011-02-22
    • 2013-11-21
    • 2016-07-27
    • 2011-06-23
    • 1970-01-01
    • 2018-01-03
    • 2019-01-09
    • 2016-11-04
    相关资源
    最近更新 更多