2013-10-30 161 views
0

經過一個星期的嘗試不同的方法後,我最後的手段就是問問你們關於我使用ActionScript Loader的問題。從外部資源加載圖片flash

我無法使用Loader從URL加載圖像,因爲它適用於我的另一個應用程序。我根本不知道代碼中的差異在哪裏。我甚至無法調試Loader對象的內容,因爲只是試圖查看那裏的內容會引發異常。

我的代碼是:

urlLoader = new URLLoader(); 
urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 
urlLoader.addEventListener(Event.COMPLETE, onLoadedBytes); 
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, passEvent); 
urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, passEvent); 
urlLoader.load(new URLRequest(url)); 

普通裝載機:

loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded); 
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, passEvent); 
loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, passEvent); 
loader.load(new URLRequest(url), new LoaderContext(true)); 

加載相關的方法:

private function onLoadedBytes(e:Event):void 
{ 
    var ba:ByteArray = e.target.data; 
    var loader:Loader = new Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded); 
    loader.loadBytes(ba); 
} 
private function onImageLoaded(e:Event):void 
{ 
    _bitmapData = e.target.content.bitmapData; 
    dispatchEvent(new Event(Event.COMPLETE)); 
} 

不知道如何解決它?我嘗試從VK遊戲(http://vk.com/playfreegames)加載圖片的域名與圖片與應用遊戲相關。

我已經搜索了堆棧的答案,但沒有解決方案提出解決我的情況。

+0

這是相關的:http://stackoverflow.com/questions/2096820/loading-external-images從另一個域? – Cherniv

回答

1

這是一個安全問題。來自文檔:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html

「如果加載的內容是圖像,則其安全沙箱外的SWF文件無法訪問其數據,除非該SWF文件的域包含在原始URL策略文件中圖像的領域「。

如果您收聽安全事件,您可能會看到它發生錯誤。 Loader的作品,因爲你只是訪問圖像,所以它很好,但URLLoaderBINARY模式不會像你想要訪問的像素數據,因此安全錯誤。如果您嘗試通過Loader訪問像素數據,則可能會得到相同的錯誤。

要麼只是裝載它,而無需訪問BitmapData後面(包括應用過濾器等),或使用一個跨域文件

+0

它確實有效!哇! :) 非常感謝。 –

1

如果我沒有記錯,服務器A上的SWF文件和服務器B上的圖像需要服務器B上的crossdomain.xml文件,以允許swf加載圖像。

http://kb2.adobe.com/cps/142/tn_14213.html

- 我會建議使用加載像LoaderMax或Hydotics/Queloader庫...

使用GreenSock COM/loadermax/

GitHub的COM/hydrotik/QueueLoader/wiki

+0

是的,在vk.com上是不允許的:http://vk.com/crossdomain.xml,對不對? – Cherniv

+0

是的,沒錯。沒有來自vk.com的許可,您無法直接使用閃存加載數據... –