套件 | flash.display |
類別 | public class Loader |
繼承 | Loader DisplayObjectContainer InteractiveObject DisplayObject EventDispatcher Object |
子類別 | AVLoader, FlexLoader |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
load()
方法來起始載入。 載入的顯示物件會當做 Loader 物件的子系加入。
請使用 URLLoader 類別來載入文字或二進位資料。
Loader 類別會覆寫下列所繼承的方法,因為 Loader 物件只擁有一個子顯示物件,也就是它所載入的顯示物件。 呼叫下列方法會擲出例外:addChild()
、addChildAt()
、removeChild()
、removeChildAt()
與 setChildIndex()
。 若要移除所載入的顯示物件,必須將 Loader 物件從其上層的 DisplayObjectContainer 子陣列中移除。
iOS 備註
在 iOS 的 AIR 應用程式中,您只能從應用程式套件中載入包含 ActionScript 的 SWF 檔案。這項限制包括任何 ActionScript,例如,具有為 ActionScript 而匯出之類別名稱的資源。若要載入任何 SWF 檔案,您必須使用與父輩 SWF 相同的應用程式網域來載入 SWF,如下列範例所示:
var loader:Loader = new Loader(); var url:URLRequest = new URLRequest("swfs/SecondarySwf.swf"); var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null); loader.load(url, loaderContext);
此外,在 iOS 上,您無法載入包含任何 ActionScript ByteCode (ABC) 的 SWF 檔案,然後取消載入檔案後再重新載入檔案。如果您嘗試執行此操作,執行階段就會擲回錯誤 3764。
在 AIR 3.6 之前,只能載入未包含 ActionScript 位元組碼的 SWF 檔案,無論檔案是從應用程式套件載入,還是透過網路載入。除了使用含有 ActionScript 的外部 SWF 檔案之外,您也可以建立 SWC 元件庫並將元件庫連結到主要 SWF。
AIR 3.7 及更新版本支援載入外部裝載的次要 SWF。關於此項功能的詳細說明可以在這裡找到。
當應用程式在 iOS 模擬器 (ipa-test-interpreter-simulator 或 ipa-debug-interpreter-simulator) 執行,或是以解譯器模式 (ipa-test-interpreter 或 ipa-debug-interpreter) 執行時,這些 iOS 限制則不適用。
Loader 安全性
當您使用 Loader 類別時,請考慮 Flash Player 和 Adobe AIR 安全性模型:
- 您可以從任何可存取來源載入內容。
- 如果呼叫的 SWF 檔在網路系統安全執行程序中,而且要載入的影片片段位於本機,則不允許載入。
- 如果載入的內容是以 ActionScript 3.0 撰寫的 SWF 檔案,便不能在另一個安全執行程序中使用 SWF 檔案來跨指令碼處理,除非您在載入的內容檔案中呼叫
System.allowDomain()
或System.allowInsecureDomain()
方法來核准跨指令碼處理。 - 如果載入的內容是 AVM1 SWF 檔案 (使用 ActionScript 1.0 或 2.0 來撰寫),就不能使用以 ActionScript 3.0 撰寫的 AVM2 SWF 檔案來跨程式碼處理。 然而,您可以使用 LocalConnection 類別在兩個 SWF 檔案之間進行通訊。
- 如果載入的內容是影像,其資料便不能使用安全執行程序以外的 SWF 檔來存取,除非影像原始網域的 URL 原則檔案中已經包含了該 SWF 檔的網域。
- 在具有「具有檔案系統的本機」之安全執行程序中的影片片段,可能無法在「本機與網路作業」安全執行程序中製作影片片段程式碼 (反之亦然)。
- 您不可以連接到常用的保留連接埠。完整的封鎖連接埠清單,請參閱在「ActionScript 3.0 開發人員指南」中的「限制網路 API」。
但在 AIR 中,application
安全執行程序中的內容 (使用 AIR 應用程式所安裝的內容) 沒有這些安全性限制。
如需安全性詳細資訊,請參閱「Flash Player 開發人員中心」主題:安全性。
當您從不受信任的來源載入 SWF 檔案 (例如與 Loader 物件的根 SWF 檔案所屬網域不同的網域),您可能會想要定義 Loader 物件的遮色片以避免載入的內容 (Loader 物件的子系) 繪製至該遮色片外面的「舞台」,如下列程式碼所示:
import flash.display.*; import flash.net.URLRequest; var rect:Shape = new Shape(); rect.graphics.beginFill(0xFFFFFF); rect.graphics.drawRect(0, 0, 100, 100); rect.graphics.endFill(); addChild(rect); var ldr:Loader = new Loader(); ldr.mask = rect; var url:String = "http://www.unknown.example.com/content.swf"; var urlReq:URLRequest = new URLRequest(url); ldr.load(urlReq); addChild(ldr);
注意:App Transport Security 是由 Apple 引進 iOS9 中,用以禁止 App 與網路服務之間不安全的連線。由於這項變更,URLLoader 將會中止透過 Loader 對不安全網站進行的所有連線,並且因為 App Transport Security 而不再運作。請在您的應用程式中將機碼增加到 Info.plist,以指定預設行為的例外。
若要完全關閉此功能,您可以在 Info.plist 加入下列項目,然後就會像以前一樣運作。
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key><true/> </dict>
請在您的應用程式中將機碼增加到應用程式描述器的 InfoAdditions 標籤,以指定預設行為的例外。
<iPhone> <InfoAdditions> <![CDATA[ <key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>www.example.com</key> <dict> <!--Include to allow subdomains--> <key>NSIncludesSubdomains</key> <true/> <!--Include to allow HTTP requests--> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <!--Include to specify minimum TLS version--> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict> ]]> </InfoAdditions> </iPhone>
相關 API 元素
屬性 | 定義自 | ||
---|---|---|---|
accessibilityImplementation : AccessibilityImplementation
對此 InteractiveObject 實體目前的輔助功能實作 (AccessibilityImplementation)。 | InteractiveObject | ||
accessibilityProperties : AccessibilityProperties
此顯示物件的目前輔助功能選項。 | DisplayObject | ||
alpha : Number
指出所指定物件的 Alpha 透明度值。 | DisplayObject | ||
blendMode : String
來自 BlendMode 類別的值,會指定要使用何種混合模式。 | DisplayObject | ||
blendShader : Shader [唯寫]
設定用來混合前景和背景的著色器。 | DisplayObject | ||
cacheAsBitmap : Boolean
如果設定為 true,Flash 執行階段會快取顯示物件的內部點陣圖表示法。 | DisplayObject | ||
cacheAsBitmapMatrix : Matrix
如果為非 null,當 cacheAsBitmap 設定為 true 時,這個 Matrix 物件會定義顯示物件的顯示方法。 | DisplayObject | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
content : DisplayObject [唯讀]
包含使用 load() 或 loadBytes() 方法載入之 SWF 檔案或影像檔 (JPG、PNG、或 GIF) 的根顯示物件。 | Loader | ||
contentLoaderInfo : LoaderInfo [唯讀]
傳回與載入中物件相對應的 LoaderInfo 物件。 | Loader | ||
contextMenu : NativeMenu
指定與此物件有關聯的快顯選單。 | InteractiveObject | ||
doubleClickEnabled : Boolean
會指定物件是否會收到 doubleClick 事件。 | InteractiveObject | ||
filters : Array
索引的陣列,其中包含目前和顯示物件相關的每個濾鏡物件。 | DisplayObject | ||
focusRect : Object
會指定這個物件是否會顯示焦點矩形。 | InteractiveObject | ||
height : Number
會指出顯示物件的高度,以像素為單位。 | DisplayObject | ||
loaderInfo : LoaderInfo [唯讀]
會傳回 LoaderInfo 物件,其中包含關於載入此顯示物件所屬之檔案的資訊。 | DisplayObject | ||
mask : DisplayObject
呼叫之顯示物件會以指定的 mask 物件遮蓋。 | DisplayObject | ||
metaData : Object
如果中繼資料是透過 PlaceObject4 標籤與 SWF 檔案中的這個 DisplayObject 實體一同儲存,則會取得 DisplayObject 實體的中繼資料物件。 | DisplayObject | ||
mouseChildren : Boolean
判斷物件的子系是否支援啟用滑鼠或使用者輸入裝置。 | DisplayObjectContainer | ||
mouseEnabled : Boolean
指定此物件是否接收滑鼠或其他使用者輸入及訊息。 | InteractiveObject | ||
mouseX : Number [唯讀]
指出滑鼠或使用者輸入裝置位置的 x 座標,以像素為單位。 | DisplayObject | ||
mouseY : Number [唯讀]
指出滑鼠或使用者輸入裝置位置的 y 座標,以像素為單位。 | DisplayObject | ||
name : String
指出 DisplayObject 的實體名稱。 | DisplayObject | ||
needsSoftKeyboard : Boolean
指定虛擬鍵盤 (螢幕上的軟體鍵盤) 是否應在此 InteractiveObject 實體接收到焦點時顯示。 | InteractiveObject | ||
numChildren : int [唯讀]
傳回此物件的子系數量。 | DisplayObjectContainer | ||
opaqueBackground : Object
會指定顯示物件是否不透明,並具有特定背景顏色。 | DisplayObject | ||
parent : DisplayObjectContainer [唯讀]
指出包含此顯示物件的 DisplayObjectContainer 物件。 | DisplayObject | ||
root : DisplayObject [唯讀]
對載入之 SWF 檔案的顯示物件而言,root 屬性就是該 SWF 檔案所呈現之顯示清單樹狀結構部分的最上層顯示物件。 | DisplayObject | ||
rotation : Number
指出 DisplayObject 實體的旋轉度數 (從該物件原本方向算起)。 | DisplayObject | ||
rotationX : Number
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 x 軸旋轉 (以度數為單位)。 | DisplayObject | ||
rotationY : Number
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 y 軸旋轉 (以度數為單位)。 | DisplayObject | ||
rotationZ : Number
表示 DisplayObject 實體相對於 3D 父輩容器從原始方向旋轉的 z 軸旋轉 (以度數為單位)。 | DisplayObject | ||
scale9Grid : Rectangle
目前產生效用的縮放格線。 | DisplayObject | ||
scaleX : Number
指出從註冊點套用的物件水平縮放 (百分比)。 | DisplayObject | ||
scaleY : Number
指出從物件註冊點套用的物件垂直縮放 (百分比)。 | DisplayObject | ||
scaleZ : Number
指出從物件註冊點套用的物件深度縮放 (百分比)。 | DisplayObject | ||
scrollRect : Rectangle
顯示物件的捲動矩形範圍。 | DisplayObject | ||
softKeyboard : String
控制軟體鍵盤的外觀。 | InteractiveObject | ||
softKeyboardInputAreaOfInterest : Rectangle
定義顯示軟體鍵盤時,應保留於螢幕上的區域 (iOS 未提供)。 | InteractiveObject | ||
stage : Stage [唯讀]
顯示物件的「舞台」。 | DisplayObject | ||
tabChildren : Boolean
判斷物件的子系是否支援啟用定位鍵。 | DisplayObjectContainer | ||
tabEnabled : Boolean
會指定這個物件是否在停駐點順序中。 | InteractiveObject | ||
tabIndex : int
會指定 SWF 檔中的物件停駐點順序。 | InteractiveObject | ||
textSnapshot : flash.text:TextSnapshot [唯讀]
傳回此 DisplayObjectContainer 實體的 TextSnapshot 物件。 | DisplayObjectContainer | ||
transform : flash.geom:Transform
這是一個物件,具有和顯示物件的矩陣、顏色轉換和像素邊界有關的屬性。 | DisplayObject | ||
uncaughtErrorEvents : UncaughtErrorEvents [唯讀]
是一種物件,當這個 Loader 物件載入的 SWF 發生未處理的錯誤時,這個物件就會傳送 uncaughtError 事件。 | Loader | ||
visible : Boolean
不管是否看得見顯示物件。 | DisplayObject | ||
width : Number
會指出顯示物件的寬度,以像素為單位。 | DisplayObject | ||
x : Number
指出 DisplayObject 實體相對於父輩 DisplayObjectContainer 之區域座標的 x 座標。 | DisplayObject | ||
y : Number
指出 DisplayObject 實體相對於父輩 DisplayObjectContainer 之區域座標的 y 座標。 | DisplayObject | ||
z : Number
表示 DisplayObject 實體相對於 3D 父輩容器的 z 座標位置 (沿著 z 軸)。 | DisplayObject |
方法 | 定義自 | ||
---|---|---|---|
Loader()
建立一個 Loader 物件,可用來載入檔案 (如 SWF、JPEG、GIF,或是 PNG 檔)。 | Loader | ||
將 DisplayObject 子實體加入至此 DisplayObjectContainer 實體。 | DisplayObjectContainer | ||
將 DisplayObject 子實體加入至此 DisplayObjectContainer 實體。 | DisplayObjectContainer | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式,以便讓偵聽程式收到事件的通知。 | EventDispatcher | ||
指出安全性限制是否會造成傳回的清單 (可用指定的 point 點呼叫 DisplayObjectContainer.getObjectsUnderPoint() 方法來取得) 省略任何顯示物件。 | DisplayObjectContainer | ||
取消 Loader 實體目前正在進行中的 load() 方法作業。 | Loader | ||
判斷指定的顯示物件是否為 DisplayObjectContainer 實體的子系,或為實體本身。 | DisplayObjectContainer | ||
會將事件傳送到事件流程。 | EventDispatcher | ||
傳回可定義顯示物件區域 (相對於 targetCoordinateSpace 物件的座標系統) 的矩形。 | DisplayObject | ||
傳回存在於指定索引位置的子顯示物件實體。 | DisplayObjectContainer | ||
傳回具有指定名稱的子顯示物件。 | DisplayObjectContainer | ||
傳回 child DisplayObject 實體的索引位置。 | DisplayObjectContainer | ||
傳回位於指定點底下,且屬於此 DisplayObjectContainer 實體之子系 (或孫系,以下類推) 的物件陣列。 | DisplayObjectContainer | ||
根據 targetCoordinateSpace 參數所定義的座標系統,並排除形狀上的任何筆畫,傳回可定義顯示物件邊界的矩形。 | DisplayObject | ||
將 point 物件從「舞台」(全域) 座標轉換成顯示物件的 (區域) 座標。 | DisplayObject | ||
將二維點從「舞台」(全域) 座標轉換為三維顯示物件的 (區域) 座標。 | DisplayObject | ||
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。 | EventDispatcher | ||
指出物件是否有已定義的指定屬性。 | Object | ||
評估顯示物件的範圍框,看它是否與 obj 顯示物件的範圍框重疊或相交。 | DisplayObject | ||
評估顯示物件,看它是否與 x 和 y 參數所指定的點重疊或相交。 | DisplayObject | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
將 SWF、JPEG、漸進式 JPEG、不含動畫的 GIF,或 PNG 檔載入此 Loader 物件的子物件中。 | Loader | ||
載入儲存在 ByteArray 物件中的二進位資料。 | Loader | ||
載入 IFilePromise 實體。 | Loader | ||
將三維顯示物件的 (區域) 座標的三維點轉換為「舞台」(全域) 座標中的二維點。 | DisplayObject | ||
將 point 物件從顯示物件的 (區域) 座標轉換成「舞台」(全域) 座標。 | DisplayObject | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
將指定的 child DisplayObject 實體從 DisplayObjectContainer 實體的子清單中移除。 | DisplayObjectContainer | ||
從 DisplayObjectContainer 子清單中的指定索引位置移除子 DisplayObject。 | DisplayObjectContainer | ||
將所有 child DisplayObject 實體從 DisplayObjectContainer 實體的子清單中移除。 | DisplayObjectContainer | ||
會從 EventDispatcher 物件移除偵聽程式。 | EventDispatcher | ||
升起顯示虛擬鍵盤。 | InteractiveObject | ||
變更顯示物件容器中現有子系的位置。 | DisplayObjectContainer | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
遞迴停止執行所有 MovieClips 的時間軸根源於此物件。 | DisplayObjectContainer | ||
替換兩個指定子物件的 z 順序 (深度階層,由前至後順序)。 | DisplayObjectContainer | ||
在子清單的兩個指定索引位置,替換子物件的 z 順序 (深度階層,由前至後順序)。 | DisplayObjectContainer | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
移除使用 load() 方法載入之 Loader 物件的子系。 | Loader | ||
嘗試取消載入 SWF 子檔案內容並停止所載入 SWF 檔的命令執行。 | Loader | ||
會傳回指定之物件的基本值。 | Object | ||
檢查此 EventDispatcher 物件是否已註冊事件偵聽程式,或者此物件的任何祖系已為特定事件類型註冊事件偵聽程式。 | EventDispatcher |
content | 屬性 |
content:DisplayObject
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
包含使用 load()
或 loadBytes()
方法載入的 SWF 檔案或影像檔 (JPG、PNG、或 GIF) 的根顯示物件。
實作
public function get content():DisplayObject
擲回值
SecurityError — 載入的 SWF 檔案或影像檔屬於您無法存取的安全執行程序。 如果是載入的 SWF 檔,您可以在呼叫 load() 或 loadBytes() 方法時,讓檔案呼叫 Security.allowDomain() 方法,或讓載入中的檔案指定 loaderContext 參數,便可以將 securityDomain 屬性設為 SecurityDomain.currentDomain 並避免這個情況發生。
|
相關 API 元素
contentLoaderInfo | 屬性 |
contentLoaderInfo:LoaderInfo
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
傳回與載入中物件相對應的 LoaderInfo 物件。 Loader 物件與載入的內容物件會共用 LoaderInfo 物件。 LoaderInfo 物件會提供與載入檔案相關的載入進度資訊與統計資料。
與載入有關的事件都會由 LoaderInfo 物件 (由 Loader 物件的 contentLoaderInfo
屬性所參照) 來傳送。 contentLoaderInfo
屬性設定為有效的 LoaderInfo 物件,即使在內容載入之前也一樣,這樣您就能在載入之前,將事件偵聽程式加入物件中。
若要偵測載入 SWF 時未捕捉到的錯誤,請使用 Loader.uncaughtErrorEvents
屬性,不要使用 Loader.contentLoaderInfo.uncaughtErrorEvents
屬性。
實作
public function get contentLoaderInfo():LoaderInfo
相關 API 元素
範例 ( 如何使用本範例 )
var url:String = "http://www.helpexamples.com/flash/images/image2.jpg"; var urlRequest:URLRequest = new URLRequest(url); var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_complete); loader.load(urlRequest); addChild(loader); function loader_complete(evt:Event):void { var target_mc:Loader = evt.currentTarget.loader as Loader; target_mc.x = (stage.stageWidth - target_mc.width) / 2; target_mc.y = (stage.stageHeight - target_mc.height) / 2; }
uncaughtErrorEvents | 屬性 |
uncaughtErrorEvents:UncaughtErrorEvents
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10.1, AIR 2 |
是一種物件,當這個 Loader 物件載入的 SWF 發生未處理的錯誤時,這個物件就會傳送 uncaughtError
事件。在任何 try..catch
區塊外面發生錯誤時,或傳送的 ErrorEvent 物件沒有註冊偵聽程式時,就會發生未捕捉到的錯誤。
注意:Loader 物件的 uncaughtErrorEvents
屬性會傳送其中的反昇事件,而不是它直接傳送的事件。它絕對不會在目標階段傳送 uncaughtErrorEvent
。它只會在捕捉階段和反昇階段中傳送事件。若要偵測目前 SWF (定義 Loader 物件的地方) 是否存在未捕捉到的錯誤,請改用 LoaderInfo.uncaughtErrorEvents
屬性。
如果 Loader 物件載入的內容是 AVM1 (ActionScript 2) SWF 檔案,AVM1 SWF 檔案中未捕捉到的錯誤,不會導致 uncaughtError
事件。
實作
public function get uncaughtErrorEvents():UncaughtErrorEvents
相關 API 元素
範例 ( 如何使用本範例 )
uncaughtError
事件處理常式來偵測未捕捉到的錯誤。
在建構函式中,程式碼會建立一個 Loader 物件,然後為 Loader 物件的 uncaughtErrorEvents
屬性所傳送的 uncaughtError
事件註冊一個偵聽程式。
在 uncaughtErrorHandler()
方法中,程式碼會檢查 error
屬性的資料類型,並視情況提供適當的回應。
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.ErrorEvent; import flash.events.UncaughtErrorEvent; import flash.net.URLRequest; public class LoaderUncaughtErrorEventExample extends Sprite { private var ldr:Loader; public function LoaderUncaughtErrorEventExample() { ldr = new Loader(); ldr.load(new URLRequest("child.swf")); ldr.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler); } private function uncaughtErrorHandler(event:UncaughtErrorEvent):void { if (event.error is Error) { var error:Error = event.error as Error; // do something with the error } else if (event.error is ErrorEvent) { var errorEvent:ErrorEvent = event.error as ErrorEvent; // do something with the error } else { // a non-Error, non-ErrorEvent type was thrown and uncaught } } } }
Loader | () | 建構函式 |
public function Loader()
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
建立一個 Loader 物件,可用來載入檔案 (如 SWF、JPEG、GIF,或是 PNG 檔)。 呼叫 load()
方法,將資源做為 Loader 實體的子系載入。 接著,您可以將 Loader 物件載入顯示物件 (例如,您可以使用 DisplayObjectContainer 實體的 addChild()
方法)。 資源會在載入「舞台」時顯示。
您也可以在「清單外」使用 Loader 實體,也就是說,不要將它加入至顯示清單中的顯示物件容器。 在這種模式裡,您可以使用 Loader 實體載入包含額外應用程式模組的 SWF 檔案。
若要偵測 SWF 檔案是否已經完成載入,您可以使用與 Loader 物件的 contentLoaderInfo
屬性關聯之 LoaderInfo 物件事件。 在這個階段,可以執行 SWF 檔案模組中的程式碼來初始化並起始模組。 在「清單外」模式中,您也可以使用 Loader 實體來載入包含組件或媒體資源的 SWF 檔案。 同樣,您也可以使用 LoaderInfo 物件事件通知來偵測組件是否已經完成載入。在這個階段,應用程式會實體化代表這些元件與資源的 ActionScript 3.0 類別,以使用 SWF 檔案元件庫的組件與媒體資源開始動作。
若要判斷 Loader 物件的狀態,請監視下列與 Loader 物件之 contentLoaderInfo
屬性關聯的 LoaderInfo 物件事件:
- 開始載入時,會傳送
open
事件。 - 如果無法載入檔案,或者載入程序當中發生錯誤,便會傳送
ioError
或securityError
事件。 - 在載入檔案的過程中,會持續觸發
progress
事件。 - 當檔案下載完成,但是尚未取得載入的影片片段的方法和屬性之前,會傳送
complete
事件。 - 一旦取得了載入的 SWF 檔案之屬性與方法,便會傳送
init
事件,方便您開始操作載入的 SWF 檔案。 這個事件會在complete
處理常式之前傳送。 在串流 SWF 檔案時,init
事件的發生時間會比complete
事件提早很多。 在大部分的情況下,請使用init
處理常式。
備註 (僅 iOS):在 iOS 的 AIR 應用程式中,您只能從應用程式套件中載入包含 ActionScript 的 SWF 檔案。這項限制包括任何 ActionScript,例如,具有為 ActionScript 而匯出之類別名稱的資源。若要載入任何 SWF 檔案,您必須使用與父輩 SWF 相同的應用程式網域來載入 SWF。
在 AIR 3.6 之前,只能載入未包含 ActionScript 位元組碼的 SWF 檔案,無論檔案是從應用程式套件載入,還是透過網路載入。除了使用含有 ActionScript 的外部 SWF 檔案之外,您也可以建立 SWC 元件庫並將元件庫連結到主要 SWF。
當應用程式在 iOS 模擬器 (ipa-test-interpreter-simulator 或 ipa-debug-interpreter-simulator) 執行,或是以解譯器模式 (ipa-test-interpreter 或 ipa-debug-interpreter) 執行時,這些限制並不適用。
相關 API 元素
close | () | 方法 |
public function close():void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會取消 Loader 實體目前正在進行中的 load()
方法作業。
相關 API 元素
load | () | 方法 |
public function load(request:URLRequest, context:LoaderContext = null):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
將 SWF、JPEG、漸進式 JPEG、不含動畫的 GIF,或 PNG 檔載入此 Loader 物件的子物件中。 如果載入內含動畫的 GIF 檔案,則只會顯示第一個影格。 由於 Loader 物件只能包含一個子系,當您後續發出 load()
要求時,會終止上一個要求 (如果上一個要求正等候執行的話),然後開始新的載入作業。
注意:在 AIR 1.5 和 Flash Player 10 中,載入的影像大小上限為 8,191 像素寬度或高度,且像素總計不得超過 16,777,215 像素 (因此,如果載入的影像寬度為 8,191 像素,則其高度上限為 2,048 像素)。若為 Flash Player 9 和 AIR 1.1 及其更早版本,高度和寬度的上限都是 2,880 像素。
載入 Loader 物件的 SWF 檔案或影像會繼承 Loader 物件之上層顯示物件的位置、旋轉與縮放屬性。
請使用 unload()
方法,將使用此方法載入的影片或影像移除,或是取消正在進行中的載入作業。
您可以拒絕 SWF 檔使用這個方法,方式是在包含 SWF 內容的 HTML 網頁中,設定 object
和 embed
標籤的 allowNetworking
參數。
iOS 備註
在 iOS 的 AIR 應用程式中,您只能從應用程式套件中載入包含 ActionScript 的 SWF 檔案。這項限制包括任何 ActionScript,例如,具有為 ActionScript 而匯出之類別名稱的資源。若要載入任何 SWF 檔案,您必須使用與父輩 SWF 相同的應用程式網域來載入 SWF,如下列範例所示:
var loader:Loader = new Loader(); var url:URLRequest = new URLRequest("swfs/SecondarySwf.swf"); var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null); loader.load(url, loaderContext);
此外,在 iOS 上,您無法載入包含任何 ActionScript ByteCode (ABC) 的 SWF 檔案,然後取消載入檔案後再重新載入檔案。如果您嘗試執行此操作,執行階段就會擲回錯誤 3764。
在 AIR 3.6 之前,只能載入未包含 ActionScript 位元組碼的 SWF 檔案,無論檔案是從應用程式套件載入,還是透過網路載入。除了使用含有 ActionScript 的外部 SWF 檔案之外,您也可以建立 SWC 元件庫並將元件庫連結到主要 SWF。
當應用程式在 iOS 模擬器 (ipa-test-interpreter-simulator 或 ipa-debug-interpreter-simulator) 執行,或是以解譯器模式 (ipa-test-interpreter 或 ipa-debug-interpreter) 執行時,這些限制並不適用。
Loader 安全性
當您使用這個方法時,請考慮 Loader 類別說明中所述的 Flash Player 安全性模型。
在 Flash Player 10 和更新版本中,如果您使用包含上載 (由 POST 主體中 "content-disposition" 檔頭的 "filename" 參數指示) 的多部分 Content-Type (例如 "multipart/form-data"),POST 作業會受限於上載所套用的安全性規則:
- 必須執行 POST 作業,以回應使用者啟動的動作 (例如按下滑鼠或按下按鍵)。
- 如果 POST 作業會跨越網域 (POST 目標與傳送 POST 要求的 SWF 檔不在同一部伺服器上),目標伺服器必須提供允許跨網域存取的 URL 原則。
此外,多部分的 Content-Type 語法必須有效 (符合 RFC2046 標準)。如果語法無效,POST 作業會受限於上載所套用的安全性規則。
如需安全性詳細資訊,請參閱「Flash Player 開發人員中心」主題:安全性。
參數
request:URLRequest — 要載入的 SWF、JPEG、GIF 或 PNG 檔的絕對或相對 URL。 相對路徑必須相對於主要 SWF 檔案。 絕對 URL 必須包含通訊協定參照,例如 http:// 或 file:///。 檔案名稱不能包含磁碟機的規格。
| |
context:LoaderContext (default = null ) — LoaderContext 物件,具有定義下列事項的屬性:
如果 僅 iOS:在 AIR for iOS 中呼叫 如需完整清單,請參閱 LoaderContext 類別中的屬性說明。 |
事件
asyncError: — 如果已經指定 LoaderContext.requestedContentParent 屬性,而且無法將載入的內容做為子系新增至指定的 DisplayObjectContainer,則會由 contentLoaderInfo 物件傳送。如果載入的內容是 flash.display.AVM1Movie ,或者如果 addChild() 呼叫 requestedContentParent 時擲出錯誤,便可能會發生此狀況。
| |
complete: — 在檔案已經完成載入時,由 contentLoaderInfo 物件傳送。complete 事件一定會在 init 事件之後傳送。
| |
httpStatus: — 在透過 HTTP 發出網路要求,而且 Flash Player 可以偵測 HTTP 狀態碼時,由 contentLoaderInfo 物件傳送。
| |
init: — 在可存取載入之 SWF 檔的屬性與方法時,由 contentLoaderInfo 物件傳送。init 事件一定會在 complete 事件之前發生。
| |
ioError: — 當發生輸入或輸出錯誤而導致載入作業失敗時,由 contentLoaderInfo 物件傳送。
| |
open: — 在載入作業開始時,由 contentLoaderInfo 物件傳送。
| |
progress: — 在載入作業進行期間收到資料時,由 contentLoaderInfo 物件傳送。
| |
securityError: — 如果具有檔案系統的本機安全執行程序中的 SWF 檔嘗試載入具有網路連線的本機安全執行程序中的內容,由 contentLoaderInfo 物件傳送,反之亦然。
| |
securityError: — 如果已經指定 LoaderContext.requestedContentParent 屬性,而且 LoaderContext.requestedContentParent 的安全執行程序無法存取載入的 SWF,則會由 contentLoaderInfo 物件傳送。
| |
unload: — 移除已載入的物件時,由 contentLoaderInfo 物件傳送。
|
擲回值
IOError — request 物件的 digest 屬性不是 null 。只有在載入 SWZ 檔 (Adobe 平台組件) 過程中呼叫 URLLoader.load() 方法時,才需設定 URLRequest 物件的 digest 屬性。
| |
SecurityError — LoaderContext.securityDomain 的值必須為 null 或 SecurityDomain.currentDomain 。 在此所反映的事實是,您只能將載入的媒體放入其自然的安全執行程序,或是您自己的安全執行程序中 (後者需要原則檔才能進行)。
| |
SecurityError — 本機 SWF 檔案只能將 LoaderContext.securityDomain 設為 null 。您不可以將非本機媒體匯入本機安全執行程序,或將其他本機媒體放入其自然安全執行程序以外的安全執行程序中。
| |
SecurityError — 您不可以連接到常用的保留連接埠。完整的封鎖連接埠清單,請參閱在「ActionScript 3.0 開發人員指南」中的「限制網路 API」。
| |
SecurityError — 如果 context 參數的 applicationDomain 或 securityDomain 屬性來自不允許的網域。
| |
SecurityError — 如果本機 SWF 檔案嘗試使用 context 參數的 securityDomain 屬性。
| |
IllegalOperationError — 如果 context 參數的 requesteContentParent 屬性為 Loader 。
| |
IllegalOperationError — 如果將 LoaderContext.parameters 參數設為非 null,且部分值不是字串。
| |
IllegalOperationError — 在 iOS 上,應用程式嘗試載入主要應用程式網域以外的應用程式網域中的 SWF 檔案。
| |
IllegalOperationError — 在 iOS 上,應用程式嘗試重新載入已經載入並取消載入包含 ABC 程式碼的 SWF。
| |
Error — 在 iOS 上,應用程式嘗試從包含 ActionScript 程式碼之應用程式套件外載入 SWF 檔案。無法捕捉這個錯誤。錯誤會以對話方塊的形式出現在應用程式螢幕上,其標題為「未編譯的 ActionScript」。在 AIR 3.6 之前,當您嘗試載入任何包含 ActionScript 的 SWF 檔案時,無論檔案是外部檔案或隨附在應用程式套件中,都會發生這個錯誤。
|
相關 API 元素
loadBytes | () | 方法 |
public function loadBytes(bytes:ByteArray, context:LoaderContext = null):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
載入儲存在 ByteArray 物件中的二進位資料。
loadBytes()
方法是非同步的方法。在存取載入物件的屬性前,您必須等候 "init" 事件。
當您使用這個方法時,請考慮 Loader 類別說明中所述的 Flash Player 安全性模型。
注意 (僅 iOS):在 iOS 的 AIR 應用程式中,您只能從應用程式套件中載入包含 ActionScript 的 SWF 檔案。這項限制包括任何 ActionScript,例如,具有為 ActionScript 而匯出之類別名稱的資源。若要載入任何 SWF 檔案,您必須使用與父輩 SWF 相同的應用程式網域來載入 SWF。
在 AIR 3.6 之前,在 iOS 上呼叫這個方法是沒有作用的。
參數
bytes:ByteArray — ByteArray 物件。 ByteArray 內容可以是 Loader 類別所支援的任何檔案格式:SWF、GIF、JPEG 或 PNG。
| |
context:LoaderContext (default = null ) — LoaderContext 物件。 只會套用 LoaderContext 物件的 applicationDomain 屬性,而不會套用 LoaderContext 物件的 checkPolicyFile 和 securityDomain 屬性。
如果 如需安全性詳細資訊,請參閱「Flash Player 開發人員中心」主題:安全性。 |
事件
asyncError: — 如果已經指定 LoaderContext.requestedContentParent 屬性,而且無法將載入的內容做為子系新增至指定的 DisplayObjectContainer,則會由 contentLoaderInfo 物件傳送。如果載入的內容是 flash.display.AVM1Movie ,或者如果 addChild() 呼叫 requestedContentParent 時擲出錯誤,便可能會發生此狀況。
| |
complete: — 當作業完成時,由 contentLoaderInfo 物件傳送。complete 事件一定會在 init 事件之後傳送。
| |
init: — 在可存取載入之資料的屬性與方法時,由 contentLoaderInfo 物件傳送。init 事件一定會在 complete 事件之前發生。
| |
ioError: — 當執行階段無法剖析位元組陣列中的資料時,由 contentLoaderInfo 物件傳送。
| |
open: — 在作業開始時,由 contentLoaderInfo 物件傳送。
| |
progress: — 當資料在記憶體中傳輸時,由 contentLoaderInfo 物件傳送。
| |
securityError: — 如果已經指定 LoaderContext.requestedContentParent 屬性,而且 LoaderContext.requestedContentParent 的安全執行程序無法存取載入的 SWF,則會由 contentLoaderInfo 物件傳送。
| |
unload: — 移除已載入的物件時,由 contentLoaderInfo 物件傳送。
|
擲回值
ArgumentError — 如果 ByteArray 物件的 length 屬性沒有大於零 (0)。
| |
IllegalOperationError — 如果 context 參數的 checkPolicyFile 或 securityDomain 屬性為非 null。
| |
IllegalOperationError — 如果 context 參數的 requesteContentParent 屬性為 Loader 。
| |
IllegalOperationError — 如果將 LoaderContext.parameters 參數設為非 null,且部分值不是字串。
| |
IllegalOperationError — 在 iOS 上,應用程式嘗試載入主要應用程式網域以外的應用程式網域中的 SWF 檔案。
| |
IllegalOperationError — 在 iOS 上,應用程式嘗試重新載入已經載入且取消載入的 SWF。
| |
Error — 在 iOS 上,應用程式嘗試從包含 ActionScript 程式碼之應用程式套件外載入 SWF 檔案。無法捕捉這個錯誤。錯誤會以對話方塊的形式出現在應用程式螢幕上,其中包含「未編譯的 ActionScript」訊息。在 AIR 3.6 之前,當您嘗試載入任何包含 ActionScript 的 SWF 檔案時,無論檔案是外部檔案或隨附在應用程式套件中,都會發生這個錯誤。
| |
SecurityError — 如果所提供的 context 屬性的 applicationDomain 屬性來自不允許的網域。
| |
SecurityError — 您不可以連接到常用的保留連接埠。完整的封鎖連接埠清單,請參閱在「ActionScript 3.0 開發人員指南」中的「限制網路 API」。
|
相關 API 元素
loadFilePromise | () | 方法 |
public function loadFilePromise(promise:IFilePromise, context:LoaderContext = null):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 2.5 |
載入 IFilePromise 實體。
loadFilePromise
方法接受 IFilePromise
物件並載入二進位資料。若資料為視訊之類的漸進式串流,請在存取載入物件的屬性之前,等待 "init" 或進度事件。否則,請等待完整的事件,以確認完整載入資料。
當您使用這個方法時,請考慮 Loader 類別說明中所述的 Flash Player 安全性模型。
參數
promise:IFilePromise — IFilePromise 物件。物件的資料來源可以是 Loader 類別所支援的任何檔案格式:SWF、GIF、JPEG 或 PNG。
| |
context:LoaderContext (default = null ) — LoaderContext 物件。 只會套用 LoaderContext 物件的 applicationDomain 屬性,而不會套用 LoaderContext 物件的 checkPolicyFile 和 securityDomain 屬性。
如果 如需安全性詳細資訊,請參閱「Flash Player 開發人員中心」主題:安全性。 |
事件
asyncError: — 如果已經指定 LoaderContext.requestedContentParent 屬性,而且無法將載入的內容做為子系新增至指定的 DisplayObjectContainer,則會由 contentLoaderInfo 物件傳送。如果載入的內容是 flash.display.AVM1Movie ,或者如果 addChild() 呼叫 requestedContentParent 時擲出錯誤,便可能會發生此狀況。
| |
complete: — 當作業完成時,由 contentLoaderInfo 物件傳送。complete 事件一定會在 init 事件之後傳送。
| |
init: — 在可存取載入之資料的屬性與方法時,由 contentLoaderInfo 物件傳送。init 事件一定會在 complete 事件之前發生。
| |
ioError: — 當執行階段無法剖析資料來源中的資料或無法讀取資料來源串流時,會由 contentLoaderInfo 物件傳送。
| |
open: — 在作業開始時,由 contentLoaderInfo 物件傳送。
| |
progress: — 當資料在記憶體中傳輸時,由 contentLoaderInfo 物件傳送。
| |
securityError: — 如果已經指定 LoaderContext.requestedContentParent 屬性,而且 LoaderContext.requestedContentParent 的安全執行程序無法存取載入的 SWF,則會由 contentLoaderInfo 物件傳送。
| |
unload: — 移除已載入的物件時,由 contentLoaderInfo 物件傳送。
|
擲回值
IllegalOperationError — 如果 context 參數的 requesteContentParent 屬性為 Loader 。
| |
IllegalOperationError — 如果將 LoaderContext.parameters 參數設為非 null,且部分值不是字串。
| |
ArgumentError — 如果以參數傳遞的 IFilePromise 物件為 Null
|
相關 API 元素
unload | () | 方法 |
public function unload():void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
移除使用 load()
方法載入 Loader 物件的子系。 與 LoaderInfo 物件關聯的 property
會重設為 null
。 由於其它物件不見得會參照此子系,因此不一定會移除此子系;然而,此子系將不再屬於 Loader 物件的子系。
當您呼叫 unload()
方法時,Loader 物件的 contentLoaderInfo
屬性會設定為 null
。任何與 SWF 一同載入的視覺資源都會取消載入並從記憶體中移除。載入之 SWF 中的 ActionScript 類別定義會留在記憶體中,而與載入之 SWF 相同的應用程式網域中的程式碼可以存取那些類別的實體,並且建立新實體。
注意 (僅 iOS):在 AIR 3.6 之前,iOS 上的這個方法是沒有作用的。
在您取消載入 SWF 子檔案時,最好的方法就是明確地關閉任何位於 SWF 子檔案物件 (例如 LocalConnection、NetConnection、NetStream,與 Sound 物件) 中的串流。 否則,SWF 子檔案中的聲音可能會繼續播放,就算取消載入 SWF 子檔案也是一樣。 若要關閉 SWF 子檔案中的串流,請將事件偵聽程式加入至 unload
事件所偵聽的子系。 當父輩呼叫 Loader.unload()
時,unload
事件便會傳送到子系。 下列程式碼將向您說明所應採取的方式:
function closeAllStreams(evt:Event) { myNetStream.close(); mySound.close(); myNetConnection.close(); myLocalConnection.close(); } myMovieClip.loaderInfo.addEventListener(Event.UNLOAD, closeAllStreams);
相關 API 元素
unloadAndStop | () | 方法 |
public function unloadAndStop(gc:Boolean = true):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
嘗試取消載入 SWF 子檔案內容並停止所載入 SWF 檔的命令執行。這個方法會藉由移除 SWF 子檔案之 EventDispatcher、NetConnection、Timer、Sound 或 Video 物件的參考,嘗試取消載入透過 Loader.load()
或 Loader.loadBytes()
所載入的 SWF 檔。因此,SWF 子檔案及其顯示清單會發生下列狀況:
- 聲音已停止。
- 舞台事件偵聽程式已移除。
enterFrame
、frameConstructed
、exitFrame
、activate
和deactivate
的事件偵聽程式已移除。- 計時器已停止。
- Camera 和 Microphone 實體已拆離。
- 影片片段已停止。
當您呼叫 unloadAndStop()
方法時,Loader 物件的 contentLoaderInfo
屬性會設定為 null
。任何與 SWF 一同載入的視覺資源都會取消載入並從記憶體中移除。載入之 SWF 中的 ActionScript 類別定義會留在記憶體中,而與載入之 SWF 相同的應用程式網域中的程式碼可以存取那些類別的實體,並且建立新實體。
注意 (僅 iOS):在 AIR 3.6 之前,iOS 上的這個方法是沒有作用的。
參數
gc:Boolean (default = true ) — 對垃圾回收器提供在 SWF 子物件上執行的提示 (true ) 或不執行的提示 (false )。如果您非同步取消載入許多物件,則將 gc 參數設定為 false 可能會提高應用程式效能。不過,如果此參數設定為 false ,在執行 unloadAndStop() 命令之後,SWF 子檔案的媒體和顯示物件可能會保存在記憶體中。
|
相關 API 元素
- 會建立
url
屬性,此屬性為影像檔的位置與名稱。 - 在
LoaderExample
建構函式中,建立名為loader
的新 Loader 物件,然後將它傳送到configureListeners()
方法,如步驟 3 中所述。 - 建構函式會建立新的 URLRequest 物件實體
request
,並傳遞url
以便告知檔案名稱與位置。 - 此
request
物件會接著傳遞至loader
物件的load()
方法,然後將影像載入顯示清單中。 clickHandler
事件偵聽程式會在載入器上註冊為click
事件。 按一下滑鼠後,載入的影像便會取消載入。configureListeners()
方法會使用下列方法加入七個事件偵聽程式:completeHandler()
方法會在影像載入完成後執行。- 如果本機未載入影像,而且網路要求已可使用且 Flash Player 可以偵測到網路要求,則會執行
httpStatusHandler()
方法。 initHandler()
方法會在completeHandler()
方法之前以及progressHandler()
方法之後執行。 一般來說,init
事件在載入 SWF 檔案時比較有用。ioErrorHandler()
方法會在影像檔不可使用或無法存取時執行。openHandler()
方法會在第一次開啟影像檔時執行。progressHandler()
方法會在影像檔開始載入,以及影像載入完成時各執行一次。unLoadHandler()
方法會在使用者按一下影像,要使用unload()
方法取消載入影像時執行。
請牢記下面的需求:
- 在此範例中,您需要將名為 Image.gif 的檔案放入與已編譯 SWF 檔案相同的目錄中。 使用的影像之影像區域必須與主要 SWF 檔的尺寸相符。
- 雖然這個範例採用了 LoaderInfo 物件可使用的所有事件,但是在大部分情況下卻只需要子集即可。 特別是當只載入影像檔時,
complete
事件 (也可能是ioError
事件) 便已足夠載入本機影像。
package { import flash.display.Loader; import flash.display.Sprite; import flash.events.*; import flash.net.URLRequest; public class LoaderExample extends Sprite { private var url:String = "Image.gif"; public function LoaderExample() { var loader:Loader = new Loader(); configureListeners(loader.contentLoaderInfo); loader.addEventListener(MouseEvent.CLICK, clickHandler); var request:URLRequest = new URLRequest(url); loader.load(request); addChild(loader); } private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.COMPLETE, completeHandler); dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); dispatcher.addEventListener(Event.INIT, initHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); dispatcher.addEventListener(Event.OPEN, openHandler); dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); dispatcher.addEventListener(Event.UNLOAD, unLoadHandler); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function httpStatusHandler(event:HTTPStatusEvent):void { trace("httpStatusHandler: " + event); } private function initHandler(event:Event):void { trace("initHandler: " + event); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } private function openHandler(event:Event):void { trace("openHandler: " + event); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal); } private function unLoadHandler(event:Event):void { trace("unLoadHandler: " + event); } private function clickHandler(event:MouseEvent):void { trace("clickHandler: " + event); var loader:Loader = Loader(event.target); loader.unload(); } } }
Tue Jun 12 2018, 03:47 PM Z