0

我有一個SWF文件這是對假設myserver1.com/my.swf和我有一個跨域文件AS3跨域錯誤

<?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事件上調整大小。

請幫幫我!!!

回答

2

如果您無權訪問http://img.AnotherimageDomain1.com/,那麼您將永遠無法在其中放置crossdomain.xml。
因此可以預計,您當前的解決方案將無法應對沙盒問題。

解決方案是,您將需要創建proxy
代理應該在http://img.imageDomain1.com/的公共根目錄中提供,這是您有權訪問的域。

由於代理將與您的應用程序在同一個域中運行,因此它將作爲中介向您的應用程序提供來自其自己域之外的數據,從而有效規避沙箱。

請記住,您應該限制您的代理服務器,否則您的網站可能會受到XSS攻擊。

乾杯

+1

很好的回答丹尼斯,但也許你的意思是說「代理應在http://img.imageDomain1.com可以提供」而非「代理應在http提供:// img.imageDomain1.com/crossdomain.xml「?換句話說,代理需要在可以放置crossdomain.xml的服務器上運行,或者在swf從(不需要crossdomain.xml)加載的同一個域上運行。 – 2011-06-17 14:36:46