2009年6月11日 星期四

Loader跨網域讀取圖檔,以及讀取Picasa的限制


Loader在跨網域讀取圖檔基本上是不需要crossdomain policy的,只是純粹當個乖乖的DisplayObject是沒什麼問題的,但是如果一但需要使用BitmapData對它做draw的動作時,flash player的安全性原則會封鎖這個動作。

這個問題很常見,之前也遇到過好幾次,但是一直沒有白紙黑字記下來,所以搞得自己常常忘記。
基本上要避開這個問題會需要用到LoaderContext這個類別。

通常我們在使用Loader讀取圖片或swf時:
public function load(request:URLRequest, context:LoaderContext = null):void

第一個參數URLRequest一定要的,第二個LoaderContext一般來說我們常常省略不下。不過現在要解決上述的問題時,我們就需要用到它了。
將LoaderContext. checkPolicyFile設成true再帶入就ok。但前題是遠端網域那邊要有允許你crossdomain才行 ,不然的話依舊沒輒。


順帶一提跟Picasa有關的,當Loader在讀取Picasa相簿裡的大圖時,很奇怪的事會發生。
開發時都很正常,丟到FireFox上也可以跑,但是一但用IE(測試的版本是IE 6)就怎樣都會遇到http 404,可是網址copy出來直接用IE開就又讀得到。
後來才知道在IE裡Loader如果去讀Picasa裡尺寸大於800 pixels的圖檔就會這樣,這似乎是Picasa的限制,只對外提供最大尺寸為800的圖(只是我不懂為什麼只有IE會這樣...)。

總之要解決這個問題就只能在Picasa大圖的網址後面加上「?imgmax=800」就好了。

沒有留言:

張貼留言