載入內容Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本 Flash Player 和 AIR 內容可以載入很多其他類型的內容,其中包括以下幾項:
使用 Loader 類別來載入 SWF 檔案和影像您可以使用 Loader 類別來載入 SWF 檔和影像 (JPG、GIF 或 PNG 檔案)。任何 SWF 檔 (在具有檔案系統的本機安全執行程序中之檔案除外) 都可以載入任何網路網域中的 SWF 檔和影像。只有位於本機安全執行程序中的 SWF 檔可以從本機檔案系統載入 SWF 檔和影像,但是位於具有網路的本機安全執行程序中之 SWF 檔則只能載入本機信任的和具有網路的本機安全執行程序中之 SWF 檔。位於具有網路的本機安全執行程序中之 SWF 檔可載入 SWF 檔以外的本機內容 (如影像),但無法存取載入內容中的資料。 當您從不受信任的來源 (例如與 Loader 物件的根 SWF 檔所屬網域不同的網域) 載入 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); 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); 當您呼叫 Loader 物件的 load() 方法時,可以指定 context 參數,它是 LoaderContext 物件。LoaderContext 類別包括三個屬性,可以讓您定義如何使用載入內容的環境:
如需詳細資訊,請參閱指定載入內容。 Loader 物件有一個重要屬性,就是 contentLoaderInfo 屬性,它是 LoaderInfo 物件。與一般其它物件不同的是,載入端 SWF 檔與載入的內容會共享 LoaderInfo 物件,而且兩方永遠都可以存取。當載入的內容是 SWF 檔時,就可以透過 DisplayObject.loaderInfo 屬性存取 LoaderInfo 物件。LoaderInfo 物件包含資訊,如載入進度、載入器與被載入者的 URL、載入器與被載入者之間的信任關係,以及其它資訊。如需詳細資訊,請參閱監視載入進度。 載入聲音和視訊任何內容 (具有檔案系統的本機安全執行程序中的內容除外) 都允許使用 Sound.load()、NetConnection.connect() 和 NetStream.play() 方法,從網路來源載入聲音和視訊。 只有具有檔案系統的本機安全執行程序和 AIR 應用程式安全執行程序中的內容,才能從本機檔案系統載入媒體。只有具有檔案系統的本機安全執行程序、AIR 應用程式安全執行程序或本機信任安全執行程序中的內容,才能存取這些載入檔案中的資料。 從載入的媒體中存取資料還有其它限制。如需詳細資訊,請參閱將載入的媒體當做資料加以存取。 使用文字欄位中的 <img> 標籤載入 SWF 檔和影像您可以使用 <img> 標籤,將 SWF 檔和點陣圖載入文字欄位中,如下列程式碼所示: <img src = 'filename.jpg' id = 'instanceName' > 您可以使用 TextField 實體的 getImageReference() 方法,存取以這種方式載入的內容,如下列程式碼所示: var loadedObject:DisplayObject = myTextField.getImageReference('instanceName'); 但是,請注意,以這種方式載入的 SWF 檔和影像是放在對應於其來源的安全執行程序中。 當您使用文字欄位中的 <img> 標籤載入影像檔案時,可以由 URL 原則檔授與權限存取影像中的資料。您可以透過將 checkPolicyFile 特質加入至 <img> 標籤來檢查原則檔,如下列程式碼所示: <img src = 'filename.jpg' checkPolicyFile = 'true' id = 'instanceName' > 當您使用文字欄位中的 <img> 標籤載入 SWF 時,可以透過呼叫 Security.allowDomain() 方法,授與存取該 SWF 檔資料的權限。 當您使用文字欄位中的 <img> 標籤載入外部檔案 (而不是使用內嵌於 SWF 中的 Bitmap 類別) 時,會自動建立 Loader 物件做為 TextField 物件的子系,而外部檔案即載入該 Loader 中,與使用 ActionScript 中的 Loader 物件載入檔案完全一樣。在此情形下,getImageReference() 會傳回自動建立的 Loader。存取此 Loader 物件並不需要安全性檢查,因為它是位於與呼叫端程式碼相同的安全執行程序中。 但是,當您參考 Loader 物件的 content 屬性,以存取載入的媒體時,就會套用安全性規則。如果載入的內容是影像,您就必須實作 URL 原則檔;而如果載入的內容是 SWF 檔,則必須讓該 SWF 檔中的程式碼呼叫 allowDomain() 方法。 Adobe AIR在應用程式安全執行程序中,文字欄位中的 <img> 標記會被略過,防止釣魚攻擊。 此外,在應用程式安全執行程序中執行的程式碼,不允許呼叫 Security 的 allowDomain() 方法。 使用 RTMP 伺服器所傳遞的內容Flash Media Server 會使用「即時媒體通訊協定」(Real-Time Media Protocol,RTMP) 提供資料、音效和視訊。您可以使用 NetConnection 類別的 connect() 方法載入這個媒體,並傳遞 RTMP URL 做為參數。Flash Media Server 可以根據要求檔案的網域限制連線,並防止內容遭到下載。如需詳細資訊,請參閱 Flash Media Server 線上說明文件,網址為 www.adobe.com/go/learn_fms_docs_tw。 若要使用 BitmapData.draw() 和 SoundMixer.computeSpectrum() 方法取出 RTMP 串流中的執行階段圖形和聲音資料,則必須允許伺服器上的存取權限。使用伺服器端 ActionScript Client.videoSampleAccess 和 Client.audioSampleAccess 屬性,允許存取 Flash Media Server 上的特定目錄。如需詳細資訊,請參閱伺服器端 ActionScript 語言參考。 |
|