LoaderContext究竟是什麼?

網絡上有關AS3跨域讀取swf、圖片報錯案例有很多種了,面對總是報“checkPolicyFile”錯誤信息,在服務器上設置了crossdomain.xml文件都沒用的,讓很多閃友頭痛很久,其實我們通常用LoaderContext類來解決,請看以下代碼:
import flash.display.Loader;
import flash.net.URLRequest;
import flash.system.LoaderContext;

var aPolce:LoaderContext = new LoaderContext(true);
var loader:Loader = new Loader();
loader.load(new URLRequest(http://xxxxxxxx/xxxx.xxx),aPolce);


//需要在原來的調用基礎增加LoaderContext類;
 
LoaderContext究竟是何方神聖?今天我們就來深討一下:
LoaderContext屬於flash.system。

使用 Loader.load() 方法加載 SWF 文件時,需要做出兩個決定:應將所加載的 SWF 文件放置到哪個安全域中,以及應放置到該安全域中的哪個應用程序域中。

 

而使用 Loader.loadBytes() 方法加載 SWF 文件時,只要選擇應用程序域,但不必指定安全域,這是因爲Loader.loadBytes() 始終將其加載的(子swf) SWF 文件放置到執行加載(父:swf)的 SWF 文件的安全域。

 

如果是加載圖像(JPEG、GIF 或 PNG)而不是 SWF 文件,則無需指定安全域或應用程序域,這是因爲這些概念只對 SWF 有意義。 此時您只需做出一個決定:是否需要以編程方式訪問所加載圖像的像素。

 

LoaderContext含有3個公共屬性:

applicationDomain : ApplicationDomain = null

指定用於 Loader.load() 或 Loader.loadBytes() 方法的應用程序域。
 
checkPolicyFile : Boolean = false
指定 Flash Player 是否應在開始加載對象本身之前,嘗試從所加載對象的服務器上下載跨域策略文件。
 
securityDomain : SecurityDomain = null
指定用於 Loader.load() 操作的安全域
 
LoaderContext(checkPolicyFile:Boolean = false, applicationDomain:ApplicationDomain = null, securityDomain:SecurityDomain = null)
創建帶有指定設置的新 LoaderContext 對象。
 
applicationDomain 屬性

指定用於 Loader.load() 或 Loader.loadBytes() 方法的應用程序域。 只應在加載使用 ActionScript 3.0 編寫的 SWF 文件(不是圖像或使用 ActionScript 1.0 或 ActionScript 2.0 編寫的 SWF 文件)時才使用此屬性。

 

checkPolicyFile 屬性  

指定 Flash Player 是否應在開始加載對象本身之前,嘗試從所加載對象的服務器上下載跨域策略文件。 此標誌適用於 Loader.load() 方法,但不適用於 Loader.loadBytes() 方法。

如果從執行調用的 SWF 文件(父swf)所在的域之外加載圖像(JPEG、GIF 或 PNG),並且需要從 ActionScript 訪問該圖像的內容,請將此標誌設置爲 true。 訪問圖像內容的示例包括引用 Loader.content屬性以獲得 Bitmap 對象,以及調用 BitmapData.draw() 方法以獲得所加載圖像像素的副本。 如果在加載時沒有指定 checkPolicyFile,就會得到一個 SecurityError 異常,這是因爲沒有

下載所需的策略文件。

 

securityDomain 屬性  

指定用於 Loader.load() 操作的安全域。 只應在加載 SWF 文件(圖像文件不需要)時使用此屬性。只有在被加載的 SWF 文件與執行加載的 SWF 文件可能來自不同的域(不同的服務器)時,選擇安全域纔有意義。 在從其它域加載 SWF 文件時,有兩種方法:

1,可以允許將被加載的 SWF 文件放置到其“自然的”安全域中,此安全域與執行加載的 SWF 文件的安全域不同;這是默認設置。

2,另一種選擇是通過將 myLoaderContext.securityDomain 設置爲與 SecurityDomain.currentDomain 相同,指出希望將被加載的 SWF 文件放置到執行加載的 SWF 文件所在的安全域中。 這稱作導入加載,就安全性而言,它等同於將被加載的 SWF 文件複製到本地服務器,然後從該服務器加載它。 此時,被加載的(子swf)SWF 文件的服務器必須具有一個策略文件,並且該策略文件必須信任執行加載的 SWF 文件的(父)域。另外,只能在傳遞在LoaderContext.securityDomain設定的安全域。 如果試圖傳遞任何其它的安全域,則會引發SecurityError 異常。

 

我們簡單認識了LoaderContext的一些作用,但是LoaderContext是爲了Loader類服務的,所以還必須對loader類進行一些認識,諸位讀者就自己研究吧~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章