2012-09-22 41 views
1

我正在嘗試製作一個顯示Google圖片搜索結果的Flash程序。 由於結果都在我不擁有的不同域上,因此我無法通過正常的crossdomain.xml過程來執行此操作。AS3中的跨域,要顯示Google圖片搜索結果

這是否意味着我想要做的事是不可能的? 當您將其作爲獨立應用程序運行時,它不起作用,而不是在網站上運行。

我試過谷歌搜索,並找到一些方法如何繞過它,但沒有一個工作。我應該繼續尋找嗎?

回答

1

您可以從另一個域中加載圖像,而不使用crossdomain.xml文件。當您嘗試訪問位圖數據或嘗試修改位圖時,您會看到錯誤。

以下代碼在Web上正常工作。

public class Main extends Sprite 
{ 

    public function Main():void 
    { 
     if (stage) init(); 
     else addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

    private function init(e:Event = null):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, init); 


     var loader:Loader = new Loader(); 
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); 
     loader.load(new URLRequest("https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTg2aSe9QhKeZrwNNM3Uyfstmsh24DWgH-Uhr-Xn-0lltyqhgvLRw")); 
     addChild(loader); 
    } 

    private function onComplete(e:Event):void 
    { 
     try { 
      var bmp:Bitmap = e.target.content; 
     } 
     catch (err:Error) 
     { 
      trace(err.message); 
     } 

    } 

} 
} 
+0

沒關係,我可以複製的BitmapData不知何故,並編輯它呢? – joon

+0

你可以嘗試在這裏建議的內容: http://www.inklink.co.at/blog/?p=14 它曾經在某些時候爲我工作,但現在當我嘗試它時,我得到一個安全錯誤。 –

0

正如Baris提到的,如果您只顯示數據,則不需要託管映像的服務器上的crossdomain.xml。 如果你需要訪問像素數據(複製/修改/等),你可以嘗試以下方法之一:

  1. 使用服務器端腳本先緩存在本地服務器上的圖像,然後加載閃。
  2. 使用URLLoader將圖像作爲二進制數據加載,然後將字節傳遞給加載器類。看看Keita's article

下面是從後供參考片段:

var urlLoader:URLLoader = new URLLoader(); 
urlLoader.dataFormat = URLLoaderDataFormat.BINARY; 
urlLoader.addEventListener(Event.COMPLETE, urlLoaderComplete); 

var url:String = "http://www.adobe.com/images/shared/product_mnemonics/50x50/flash_player_50x50.gif"; 
urlLoader.load(new URLRequest(url)); 

function urlLoaderComplete(e:Event):void 
{ 
    var loader:Loader = new Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplete); 
    loader.loadBytes(urlLoader.data as ByteArray); 
} 


function loaderComplete(e:Event):void 
{ 
    var bmp:Bitmap = e.currentTarget.content as Bitmap; 
    addChild(bmp); 
    var bitmapData:BitmapData = bmp.bitmapData 
    bitmapData.applyFilter(bitmapData, bitmapData.rect, new Point(0, 0), 
    new ColorMatrixFilter([ 
     0, 0, 0, 0, 0, 
     1, 1, 0, 0, 0, 
     0, 0, 1, 0, 0, 
     0, -1, -1, 1, 0 
    ])); 
} 
+0

這是否違反了一些沙箱法,這意味着它可能在未來停止工作?如果可以輕鬆繞過這些限制,他們爲什麼首先出現? – joon

+0

而且這也行不通:/ ... – joon

+1

嗯,我只在本地測試了bytearray版本(在Flash Player和AIR中),所以可能已經被沙箱化了。如果AIR不是選項,那麼我會先在本地服務器上緩存圖像,然後在Flash Player中加載是最佳選擇。 –