載入外部 SWF 檔

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

在 ActionScript 3.0 中,SWF 檔是透過 Loader 類別載入。若要載入外部 SWF 檔,ActionScript 需要執行四項工作:

  1. 使用檔案的 URL 建立新的 URLRequest 物件。

  2. 建立新的 Loader 物件。

  3. 呼叫 Loader 物件的 load() 方法,將 URLRequest 實體當做參數傳遞。

  4. 針對顯示物件容器 (例如 Flash 文件的主要時間軸) 呼叫 addChild() 方法,以便將 Loader 實體加入顯示清單。

最後,完成的程式碼看起來像這樣:

var request:URLRequest = new URLRequest("http://www.[yourdomain].com/externalSwf.swf"); 
var loader:Loader = new Loader() 
loader.load(request); 
addChild(loader);

這個相同的程式碼透過指定影像檔案的 URL (而不是 SWF 檔的 URL),可用來載入如 JPEG、GIF 或 PNG 影像等外部影像檔案。SWF 檔和影像檔案的不同點是它可以包含 ActionScript。因此,雖然載入 SWF 檔也許和載入影像的程序相同,但是如果 Flash Player 或 AIR 正在播放 SWF,而且您想要使用 ActionScript 以任何方式與外部 SWF 檔進行通訊,那麼載入外部 SWF 檔時,載入端 SWF 檔與被載入端 SWF 檔都必須位於相同的安全執行程序中。此外,如果外部 SWF 檔中的類別和載入端 SWF 檔中的類別共享相同的命名空間時,您可能需要為被載入端 SWF 檔建立新的應用程式網域,如此才能避免命名空間衝突。如需有關安全及應用程式網域考量的詳細資訊,請參閱 使用應用程式網域 載入內容

成功載入外部 SWF 檔後,您就可以透過 Loader.content 屬性來存取這個檔案。如果此外部 SWF 檔已經發佈為 ActionScript 3.0 的格式,根據它所擴充的類別型態,物件可以是一個影片片段或 Sprite。

與其他平台相比,在 Adobe AIR for iOS 中載入 SWF 檔案有些不同。如需詳細資訊,請參閱 在 AIR for iOS 中載入 SWF 檔案

載入舊版 SWF 檔的考量事項

如果外部 SWF 檔已經使用舊版的 ActionScript 發佈,就必須考慮一些重要的限制事項。和執行於 AVM2 (ActionScript Virtual Machine 2) 中的 ActionScript 3.0 SWF 檔不同的是,使用 ActionScript 1.0 或 2.0 發佈的 SWF 檔是在 AVM1 (ActionScript Virtual Machine 1) 中執行。

將 ActionScript 1.0 或 2.0 SWF 檔載入 ActionScript 3.0 SWF 檔時,(比起載入 ActionScript 3.0 SWF 檔) 有很大的差異。 Flash Player 也對先前發佈的內容提供完整的舊版相容性。能在舊版 Flash Player 中執行的任何內容都可以在支援 ActionScript 3.0 的 Flash Player 中執行。但有下列限制:

  • ActionScript 3.0 程式碼可載入 ActionScript 1.0 或 2.0 中所撰寫的 SWF 檔。當 ActionScript 1.0 或 2.0 SWF 檔成功載入時,載入的物件 ( Loader.content 屬性) 會是 AVM1Movie 物件。AVM1Movie 實體與 MovieClip 實體不同。而是顯示物件,但和影片片段不同的是,它不包括與時間軸相關的方法或屬性。父輩 AVM2 SWF 檔將無法存取所載入 AVM1Movie 物件的屬性、方法或物件。

  • 以 ActionScript 1.0 或 2.0 撰寫的 SWF 檔無法載入以 ActionScript 3.0 撰寫的 SWF 檔。這表示,以 Flash 8、Flex Builder 1.5 或更早版本所編寫的 SWF 檔無法載入 ActionScript 3.0 SWF 檔。

    唯一的例外是,只要 ActionScript 2.0 SWF 檔先前未將任何內容載入其任何階層,就可以用 ActionScript 3.0 SWF 檔取代本身。ActionScript 2.0 SWF 檔可以呼叫 loadMovieNum() ,然後將值 0 傳遞至 level 參數,藉以達到此目的。

  • 一般來說,以 ActionScript 1.0 或 2.0 撰寫的 SWF 檔必須進行移轉,才能和 ActionScript 3.0 撰寫的 SWF 檔一起使用。例如,假設您以 ActionScript 2.0 建立了媒體播放程式。這個媒體播放程式會載入同樣以 ActionScript 2.0 所建立的各種內容。但是,您不能以 ActionScript 3.0 建立新內容,並在該媒體播放程式中載入此內容。您必須將這個媒體播放程式移轉為 ActionScript 3.0。

    但是,如果您使用 ActionScript 3.0 建立媒體播放程式,這個媒體播放程式就可以直接載入 ActionScript 2.0 內容。

下表摘要說明舊版 Flash Player 載入新內容和執行指令碼編寫的限制,以及不同 ActionScript 版本所撰寫的 SWF 檔在跨指令碼處理方面有哪些限制。

支援的功能

Flash Player 7

Flash Player 8

Flash Player 9 和 10

可以載入哪些 SWF 版本

7 和更早版本

8 和更早版本

9 (或 10) 和更早版本

包含的 AVM

AVM1

AVM1

AVM1 和 AVM2

可執行哪些 ActionScript 版本撰寫的 SWF

1.0 和 2.0

1.0 和 2.0

1.0、2.0 和 3.0

在下表中,「支援的功能」表示在 Flash Player 9 或更新版本中執行的內容。在 Flash Player 8 或更早版本中執行的內容只能載入、顯示、執行和跨指令碼處理 ActionScript 1.0 和 2.0。

支援的功能

使用 ActionScript 1.0 and 2.0 建立的內容

使用 ActionScript 3.0 建立的內容

可以載入的內容和執行程式碼的內容版本

僅 ActionScript 1.0 和 2.0

ActionScript 1.0 和 2.0 以及 ActionScript 3.0

可以跨指令碼處理的內容版本

僅 ActionScript 1.0 和 2.0 (透過本機連線的 ActionScript 3.0)

透過本機連線的 ActionScript 1.0 和 2.0。

ActionScript 3.0