套件flash.net
類別public class URLLoader
繼承URLLoader Inheritance EventDispatcher Inheritance Object

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

URLLoader 類別能以文字、二進位資料或 URL 編碼之變數的形式,從 URL 下載資料。 這適用於下載文字檔、XML 或其它資訊,以便用於動態資料驅動應用程式中。

URLLoader 物件會先從 URL 下載所有資料,然後再讓 ActionScript 使用此資料。 它會送出有關下載進度的通知,而且您可以透過 bytesLoadedbytesTotal 屬性以及傳送的事件監視進度。

使用此方法時,必須顧及 Adobe ® Flash ® Player 安全性模型:

Flash Player 8 和更新版本:

Flash Player 7 和更新版本:

如需詳細資訊,請參閱下列章節:

若 SWF 檔是在早於 Flash Player 7 版本的播放程式中執行,則其 url 必須和發出這個呼叫的 SWF 檔位於相同的父網域。 經由移除檔案 URL 最左邊的組件即可得到父網域。 例如,位於 www.adobe.com 的 SWF 檔可以從位於 store.adobe.com 的來源中載入資料,因為這兩個檔案都位於相同名稱的父網域 (adobe.com) 中。

檢視範例

請參閱

URLRequest
URLVariables
URLStream
讀取外部 XML 文件
處理外部資料


公用 屬性
 屬性定義自
  bytesLoaded : uint = 0
指出載入作業截至目前為止已載入的位元組數目。
URLLoader
  bytesTotal : uint = 0
指出下載資料中的位元組總數。
URLLoader
 Inheritedconstructor : Object
類別物件的參照或是特定物件實體的建構函數。
Object
  data : *
會從載入作業接收的資料。
URLLoader
  dataFormat : String = "text"
控制要以文字 (URLLoaderDataFormat.TEXT)、原始二進位資料 (URLLoaderDataFormat.BINARY) 或 URL 編碼之變數 (URLLoaderDataFormat.VARIABLES) 的形式接收下載的資料。
URLLoader
 Inheritedprototype : Object
[static] 類別或函數物件之原型物件的參照。
Object
公用 方法
 方法定義自
  
URLLoader(request:URLRequest = null)
會建立 URLLoader 物件。
URLLoader
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式¡以便讓偵聽程式收到事件的通知。
EventDispatcher
  
會關閉進行中的載入作業。
URLLoader
 Inherited
會將事件傳送到事件流程。
EventDispatcher
 Inherited
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。
EventDispatcher
 Inherited
指出物件是否有已定義的指定屬性。
Object
 Inherited
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。
Object
  
load(request:URLRequest):void
會從指定的 URL 傳送並載入資料。
URLLoader
 Inherited
指出指定的屬性是否存在,以及是否可列舉。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
會從 EventDispatcher 物件移除偵聽程式。
EventDispatcher
 Inherited
為迴圈作業設定動態屬性的可用性。
Object
 Inherited
會傳回指定之物件的字串形式。
Object
 Inherited
會傳回指定之物件的基本值。
Object
 Inherited
檢查此 EventDispatcher 物件是否已註冊為事件偵聽程式,或者此物件的任何祖先已註冊為特定的事件類型。
EventDispatcher
事件
 事件 摘要 定義自
 Inherited 當 Flash Player 取得作業系統焦點並成為作用中狀態時傳送。EventDispatcher
   在所有接收的資料都已解碼,並放置於 URLLoader 物件的 data 屬性之後傳送。URLLoader
 Inherited 當 Flash Player 失去作業系統焦點並成為停用狀態時傳送。EventDispatcher
   當 URLLoader.load() 的呼叫嘗試透過 HTTP 存取資料,而且目前的 Flash Player 環境能夠偵測並傳回要求的狀態碼時傳送。URLLoader
   在 URLLoader.load() 的呼叫產生終止下載的嚴重錯誤時傳送。URLLoader
   在呼叫 URLLoader.load() 方法後開始進行下載作業時傳送。URLLoader
   在下載作業進行中收到資料時傳送。URLLoader
   當 URLLoader.load() 的呼叫嘗試從安全執行程序以外的伺服器載入資料時傳送。URLLoader
屬性詳細資訊
bytesLoaded屬性
public var bytesLoaded:uint = 0

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

指出載入作業截至目前為止已載入的位元組數目。

bytesTotal屬性 
public var bytesTotal:uint = 0

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

指出下載資料中的位元組總數。 當載入作業正在進行時,這項屬性會包含 0;當作業完成時,這項屬性會填入不同的值。此外,遺失 Content-Length 檔頭將會造成 bytesTotal 變為非確定式。

data屬性 
public var data:*

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會從載入作業接收的資料。 只有當載入作業完成時,才能填入這項屬性。 資料的格式會取決於 dataFormat 屬性的設定而定:

如果 dataFormat 屬性為 URLLoaderDataFormat.TEXT,接收的資料就是包含載入檔文字的字串。

如果 dataFormat 屬性為 URLLoaderDataFormat.BINARY,接收的資料就是包含原始二進位資料的 ByteArray 物件。

如果 dataFormat 屬性為 URLLoaderDataFormat.VARIABLES,接收的資料就是包含 URL 編碼變數的 URLVariables 物件。

請參閱

dataFormat屬性 
public var dataFormat:String = "text"

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會控制要以文字 (URLLoaderDataFormat.TEXT)、原始二進位資料 (URLLoaderDataFormat.BINARY) 或 URL 編碼之變數 (URLLoaderDataFormat.VARIABLES) 的形式接收下載的資料。

如果 dataFormat 屬性值為 URLLoaderDataFormat.TEXT,接收的資料就是包含載入檔文字的字串。

如果 dataFormat 屬性值為 URLLoaderDataFormat.BINARY,接收的資料就是包含原始二進位資料的 ByteArray 物件。

如果 dataFormat 屬性值為 URLLoaderDataFormat.VARIABLES,接收的資料就是包含 URL 編碼變數的 URLVariables 物件。

預設值為 URLLoaderDataFormat.TEXT.

請參閱

建構函式詳細資訊
URLLoader()建構函式
public function URLLoader(request:URLRequest = null)

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會建立 URLLoader 物件。

參數
request:URLRequest (default = null) — 指定要下載之 URL 的 URLRequest 物件。 如果省略此參數,就不會開始任何載入作業。 如果指定此參數,就會立即開始載入作業 (如需詳細資訊,請參閱 load 項目)。

請參閱

方法詳細資訊
close()方法
public function close():void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會關閉進行中的載入作業。 任何進行中的載入作業都會立即終止。 如果目前並未串流任何 URL,就會擲回無效的串流錯誤。

load()方法 
public function load(request:URLRequest):void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會從指定的 URL 傳送並載入資料。 根據 dataFormat 屬性設定的值而定,您能以文字、原始二進位資料或 URL 編碼之變數的形式接收此資料。 請注意,dataFormat 屬性的預設值為文字。 如果您想要將資料傳送至指定的 URL,可以在 URLRequest 物件中設定 data 屬性。

注意:如果下載的檔案包含非 ASCII 字元 (如在許多非英文語系中找到的字元),建議您將檔案儲存為 UTF-8 或 UTF-16 編碼,而不要儲存為類似 ASCII 的非 Unicode 格式。

使用此方法時,必須顧及 Flash Player 安全性模型:

在 Flash Player 9 和更新版本中,您可以拒絕 SWF 檔使用這個方法,方式是在包含 SWF 內容的 HTML 網頁中,設定 objectembed 標籤的 allowNetworking 參數。

Flash Player 8 和更新版本:

若為 Flash Player 7 及更新版本,網站便可以透過跨網域原則檔,允許對資源進行跨網域存取。 在 Flash Player 7 及更新版本中執行的任何 SWF 檔版本中,其 url 必須位於完全相同的網域。 例如,www.adobe.com 的 SWF 檔只能從同樣在 www.adobe.com 中的來源載入資料。

如需詳細資訊,請參閱下列章節:

若 SWF 檔是在早於 Flash Player 7 版本的播放程式中執行,則其 url 必須和發出這個呼叫的 SWF 檔位於相同的父網域。 經由移除檔案 URL 最左邊的組件即可得到父網域。 例如,位於 www.adobe.com 的 SWF 檔可以從位於 store.adobe.com 的來源中載入資料,因為這兩個檔案都位於相同名稱的父網域 (adobe.com) 中。

參數

request:URLRequest — 指定要下載之 URL 的 URLRequest 物件。


事件
complete:Event — 會在順利載入資料之後傳送。
 
httpStatus:HTTPStatusEvent — 如果是透過 HTTP 存取,而且目前的 Flash Player 環境支援取得狀態碼,則除了任何 completeerror 事件以外,您還可以收到這些事件。
 
ioError:IOErrorEvent — 無法完成載入作業。
 
progress:ProgressEvent — 在下載作業進行中收到資料時傳送。
 
securityError:SecurityErrorEvent — 載入作業嘗試從呼叫者之安全執行程序以外的伺服器擷取資料。 您可以使用伺服器上的原則檔來解決此問題。
 
open:Event — 在載入作業開始時傳送。

擲回值
ArgumentError URLRequest.requestHeader 物件可能不會包含特定禁止的 HTTP 要求檔頭。 如需詳細資訊,請參閱 URLRequestHeader 類別的說明。
 
MemoryError — 這項錯誤可能會因為下列原因而發生:1) Flash Player 無法將 URLRequest.data 參數從 UTF8 轉換成 MBCS。 如果傳遞給 load() 的 URLRequest 物件設定為執行 GET 作業,而且 System.useCodePage 設定為 true,就會發生這項錯誤。2) Flash Player 無法分配 POST 資料的記憶體。 如果傳遞給 load 的 URLRequest 物件設定為執行 POST 作業,就會發生這項錯誤。
 
SecurityError — 本機不受信任的 SWF 檔可能無法與網際網路進行通訊。 您可以透過將此 SWF 檔重新分類為「具有網路連線的本機」或受信任,解決此問題。
 
TypeError — 要求參數的值或傳遞之 URLRequest 物件的 URLRequest.url 屬性都為 null

請參閱


範例

下列範例會載入 XML 檔,並在文字欄位中顯示其元素的第一個引數的內容。

範例會建立 URLRequest 物件以識別 XML 檔的位置,在這個範例中,該檔案與 SWF 檔在相同目錄中。 檔案於 try...catch 區塊中載入,以捕捉可能發生的任何錯誤 (這裡我們捕捉到 SecurityError 錯誤)。 如果發生 IO_ERROR 事件,會叫用 errorHandler() 方法,由它在 xmlTextField 文字欄位中寫入錯誤訊息。 等擷取到 XML 檔的資料,並放在 loader URLLoader 物件的 data 屬性中之後,就傳送 Event.COMPLETE 事件,並叫用 loaderCompleteHandler() 方法。

loaderCompleteHandler() 方法中,try...catch 區塊會用來捕捉於載入的資料從檔案轉換成 XML 物件過程中可能發生的任何剖析錯誤。 readNodes() 方法接著遞迴處理 XML 文件的節點中的所有元素,並將所有元素的第一個特質清單附加到 xmlTextField 文字欄位。

package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.xml.*;
    import flash.events.IOErrorEvent;
  
    public class URLLoader_loadExample extends Sprite {
        private var xmlTextField:TextField = new TextField();
        private var externalXML:XML;    
        private var loader:URLLoader;

        public function URLLoader_loadExample() {
            var request:URLRequest = new URLRequest("xmlFile.xml");

            loader = new URLLoader();
            
            try {
                loader.load(request);
            }
            catch (error:SecurityError)
            {
                trace("A SecurityError has occurred.");
            }

             loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
            loader.addEventListener(Event.COMPLETE, loaderCompleteHandler);

            xmlTextField.x = 10;
            xmlTextField.y = 10;
            xmlTextField.background = true;
            xmlTextField.autoSize = TextFieldAutoSize.LEFT;

            addChild(xmlTextField);
        }

        private function loaderCompleteHandler(event:Event):void {

                try {
                    externalXML = new XML(loader.data);
                    readNodes(externalXML);    
                } catch (e:TypeError) {
                    trace("Could not parse the XML file.");
                }
        }

        private function readNodes(node:XML):void {

                for each (var element:XML in node.elements()) {
                    xmlTextField.appendText(element.attributes()[0] + "\n");

                    readNodes(element);
                }    
        }

        private function errorHandler(e:IOErrorEvent):void {
            xmlTextField.text = "Had problem loading the XML File.";
        }
    }
}
事件詳細資訊
complete 事件
事件物件類型: flash.events.Event
Event.type property = flash.events.Event.COMPLETE

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會在所有接收的資料都已解碼,並放置於 URLLoader 物件的 data 屬性之後傳送。 一旦傳送這個事件,就可以存取接收的資料。

定義 complete 事件物件的 type 屬性值。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target已完成載入的網路物件。

請參閱

httpStatus 事件  
事件物件類型: flash.events.HTTPStatusEvent
HTTPStatusEvent.type property = flash.events.HTTPStatusEvent.HTTP_STATUS

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會當 URLLoader.load() 的呼叫嘗試透過 HTTP 存取資料,而且目前的 Flash Player 環境能夠偵測並傳回要求的狀態碼時傳送 (某些瀏覽器環境可能無法提供這項資訊)。 請注意,httpStatus 事件 (如果有的話) 會在 (另外) 任何 completeerror 事件之前傳送。

定義 httpStatus 事件物件的 type 屬性值。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
status伺服器傳回的 HTTP 狀態碼。
target接收 HTTP 狀態碼的網路物件。

請參閱

ioError 事件  
事件物件類型: flash.events.IOErrorEvent
IOErrorEvent.type property = flash.events.IOErrorEvent.IO_ERROR

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會在 URLLoader.load() 的呼叫產生終止下載的嚴重錯誤時傳送。

定義 ioError 事件物件的 type 屬性值。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target遭遇輸入/輸出錯誤的網路物件。
text要顯示為錯誤訊息的文字。

請參閱

open 事件  
事件物件類型: flash.events.Event
Event.type property = flash.events.Event.OPEN

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會在呼叫 URLLoader.load() 方法後開始進行下載作業時傳送。

定義 open 事件物件的 type 屬性值。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target已開啟連線的網路物件。

請參閱

progress 事件  
事件物件類型: flash.events.ProgressEvent
ProgressEvent.type property = flash.events.ProgressEvent.PROGRESS

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

在下載作業進行中收到資料時傳送。

請注意,使用 URLLoader 物件時,要等到完全接收資料之後,才能存取資料。 因此,進度事件只能做為目前下載進度的通知。 若要在完整下載前存取資料,請使用 URLStream 物件。

定義 progress 事件物件的 type 屬性值。

這個事件具有下列屬性:

屬性
bubblesfalse
bytesLoaded在偵聽程式處理事件時¡載入的項目或位元組數目。
bytesTotal如果載入程序成功時,最終將載入的項目或位元組總數。
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target回報進度的網路物件。

請參閱

securityError 事件  
事件物件類型: flash.events.SecurityErrorEvent
SecurityErrorEvent.type property = flash.events.SecurityErrorEvent.SECURITY_ERROR

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會當 URLLoader.load() 的呼叫嘗試從安全執行程序以外的伺服器載入資料時傳送。

SecurityErrorEvent.SECURITY_ERROR 常數會定義 securityError 事件物件的 type 屬性值。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target回報安全性錯誤的網路物件。
text要顯示為錯誤訊息的文字。

請參閱

範例 如何使用範例
URLLoaderExample.as

下列範例會載入並顯示在本機文字檔案中找到的資料。 此外,它也會追蹤事件處理資訊。

注意:若要執行此範例,請將名為 URLStreamExample.swf 的檔案與 SWF 檔放置於相同的目錄中。 該檔案應該僅包含下列文字行:answer=42&question=unknown

此範例程式碼會執行下列動作:

  1. 建構函數會建立 URLLoader 實體 loader 和 URLRequest 實體 request,其中包含要載入之檔案的位置與檔名。
  2. loader 物件傳遞給 configureListeners() 方法後,再將偵聽程式加入每一個支援的 URLLoader 事件。
  3. 然後將 request 物件傳遞給 loader.load() 方法,以便載入文字檔。
  4. 當 URLLoader 完成文字檔的載入作業時,就會引發 Event.COMPLETE event,並觸發 completeHandler() 方法。 completeHandler() 方法會使用已載入檔案的文字來建立 URLVariables 物件。 URLVariables 物件會將已經過 URL 編碼之名稱/值的配對轉換成 ActionScript 屬性,使得載入的資料更容易操控。

package {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.net.*;

    public class URLLoaderExample extends Sprite {
        public function URLLoaderExample() {
            var loader:URLLoader = new URLLoader();
            configureListeners(loader);

            var request:URLRequest = new URLRequest("urlLoaderExample.txt");
            try {
                loader.load(request);
            } catch (error:Error) {
                trace("Unable to load requested document.");
            }
        }

        private function configureListeners(dispatcher:IEventDispatcher):void {
            dispatcher.addEventListener(Event.COMPLETE, completeHandler);
            dispatcher.addEventListener(Event.OPEN, openHandler);
            dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
            dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
            dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
        }

        private function completeHandler(event:Event):void {
            var loader:URLLoader = URLLoader(event.target);
            trace("completeHandler: " + loader.data);
    
            var vars:URLVariables = new URLVariables(loader.data);
            trace("The answer is " + vars.answer);
        }

        private function openHandler(event:Event):void {
            trace("openHandler: " + event);
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
        }

        private function securityErrorHandler(event:SecurityErrorEvent):void {
            trace("securityErrorHandler: " + event);
        }

        private function httpStatusHandler(event:HTTPStatusEvent):void {
            trace("httpStatusHandler: " + event);
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("ioErrorHandler: " + event);
        }
    }
}




 

有新的意見加入至這個頁面時,傳送電子郵件給我 | 意見報告

目前頁面: http://livedocs.adobe.com/flash/9.0_tw/ActionScriptLangRefV3/flash/net/URLLoader.html