Ładowanie zewnętrznego pliku SWF

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

W języku ActionScript 3.0 do ładowania plików SWF służy klasa Loader. Aby załadować zewnętrzny plik SWF, program w języku ActionScript musi wykonać trzy operacje:

  1. Utworzyć nowy obiekt URLRequest z adresem URL pliku.

  2. Utworzyć nowy obiekt Loader.

  3. Wywołać metodą load() obiektu Loader, przekazując jako parametr instancję URLRequest.

  4. Wywołać metodę addChild() w kontenerze obiektu wyświetlanego (np. głównej osi czasu dokumentu Flash), aby dodać instancję klasy Loader do listy wyświetlania.

Ostatecznie kod przyjmuje następującą postać:

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

Ten sam kod może posłużyć do załadowania zewnętrznego pliku obrazu, takiego jak JPEG, GIF lub PNG — należy tylko zamiast adresu URL pliku SWF podać adres URL pliku obrazu. Plik SWF, w przeciwieństwie do plików obrazów, może zawierać kod ActionScript. Dlatego, mimo że proces ładowania pliku SWF jest identyczny z procesem ładowania obrazu, podczas ładowania zewnętrznego pliku SWF zarówno ładujący, jak i ładowany plik SWF musi rezydować w tym samym obszarze izolowanym — jeżeli pliki są odtwarzane w programie Flash Player lub środowisku AIR i planowane jest wykorzystanie kodu ActionScript do jakiejkolwiek komunikacji z zewnętrznym plikiem SWF. Ponadto, jeśli zewnętrzny plik SWF zawiera klasy należące do tej samej przestrzeni nazw, co klasy w ładującym pliku SWF, może zajść konieczność utworzenia nowej domeny aplikacji dla ładowanego pliku SWF w celu uniknięcia konfliktów nazw. Więcej informacji na temat kwestii bezpieczeństwa i domen aplikacji zawierają sekcje Praca z domenami aplikacji oraz Ładowanie treści .

Po pomyślnym załadowaniu zewnętrznego pliku SWF można uzyskać do niego dostęp za pośrednictwem właściwości Loader.content . Jeśli zewnętrzny plik SWF został opublikowany dla środowiska ActionScript 3.0, właściwość ta będzie zawierała klip filmowy lub ikonkę, w zależności od tego, jaką klasę rozszerza.

Wczytywanie plików SWF przebiega w środowisku Adobe AIR for iOS nieco inaczej niż na pozostałych platformach. Więcej informacji można uzyskać w artykule Wczytywanie plików SWF w środowisku AIR for iOS .

Uwagi dotyczące ładowania starszych plików SWF

Jeśli zewnętrzny plik SWF został opublikowany za pomocą starszej wersji środowiska ActionScript, należy wziąć pod uwagę pewne ważne uwarunkowania. W przeciwieństwie do plików SWF w języku ActionScript 3.0, które działają w maszynie wirtualnej AVM2 (ActionScript Virtual Machine 2), pliki SWF opublikowane dla środowiska ActionScript 1.0 lub 2.0 działają w maszynie wirtualnej AVM1 (ActionScript Virtual Machine 1).

Proces ładowania pliku ActionScript 1.0 lub SWF w wersji 2.0 SWF do pliku SWF w wersji ActionScript 3.0 przebiega inaczej niż ładowanie pliku SWF w wersji ActionScript 3.0. Program Flash Player gwarantuje pełną zgodność wstecz z dotychczas opublikowanymi treściami. Wszelkie treści działające w poprzednich wersjach programu Flash Player będą działać w wersjach programu Flash Player obsługujących język ActionScript 3.0. Obowiązują jednak następujące ograniczenie:

  • Kod ActionScript 3.0 może załadować plik SWF napisany w języku ActionScript 1.0 lub 2.0. Po pomyślnym załadowaniu pliku SWF w formacie ActionScript 1.0 lub 2.0 załadowany obiekt (właściwość Loader.content ) jest obiektem klasy AVM1Movie. Instancja klasy AVM1Movie nie jest tożsama z instancją klasy MovieClip. Jest wprawdzie obiektem wyświetlanym, ale w przeciwieństwie do klipu filmowego nie zawiera metod ani właściwości związanych z osią czasu. Nadrzędny plik SWF AVM2 nie ma dostępu do właściwości, metod ani obiektów załadowanego obiektu AVM1Movie.

  • Pliki SWF napisane w języku ActionScript 1.0 lub 2.0 nie mogą ładować plików SWF napisanych w języku ActionScript 3.0. Oznacza to, że pliki SWF stworzone w programie Flash 8, Flex Builder 1.5 lub wcześniejszych wersjach tych programów nie mogą ładować plików SWF napisanych w języku ActionScript 3.0.

    Jedynym wyjątkiem od tej reguły jest sytuacja, w której plik SWF w języku ActionScript 2.0 sam zastępuje się plikiem SWF w języku ActionScript 3.0, a wersja pliku SWF w języku ActionScript 2.0 nie załadowała uprzednio żadnych treści (na żadnym poziomie). W języku ActionScript 2.0 plik SWF może wykonać taką operację poprzez wywołanie loadMovieNum() z zerową wartością parametru level .

  • Co do zasady pliki SWF napisane w języku ActionScript 1.0 lub 2.0 wymagają migracji, jeśli mają współdziałać z plikami SWF napisanymi w języku ActionScript 3.0. Załóżmy, że stworzyliśmy odtwarzacz multimedialny w języku ActionScript 2.0. Odtwarzacz ten ładuje różne treści, także utworzone w języku ActionScript 2.0. Nie będzie możliwe załadowanie do odtwarzacza nowych treści utworzonych w języku ActionScript 3.0. Odtwarzacz należy poddać migracji do wersji ActionScript 3.0.

    Jeśli jednak napiszemy odtwarzacz multimedialny w języku ActionScript 3.0, to będzie on mógł ładować treści w języku ActionScript 2.0.

W poniższej tabeli podsumowano ograniczenia poprzednich wersji odtwarzacza Flash Player dotyczące ładowania nowszych treści i wykonywania kodu oraz ograniczenia we wzajemnym wywoływaniu skryptów między plikami SWF utworzonymi w różnych wersjach języka ActionScript.

Obsługiwana funkcjonalność

Flash Player 7

Flash Player 8

Flash Player 9 i 10

Może ładować SWF opublikowane dla wersji

7 i wcześniejszych

8 i wcześniejszych

9 (lub 10) i wcześniejszych

Zawiera maszynę AVM

AVM1

AVM1

AVM1 i AVM2

Wykonuje SWF napisane w języku ActionScript

1.0 i 2.0

1.0 i 2.0

1.0, 2.0 i 3.0

W poniższej tabeli „Obsługiwana funkcjonalność” oznacza treści działające w programie Flash Player 9 lub nowszych wersjach. Treści działające w programie Flash Player 8 lub starszych wersjach mogą ładować, wyświetlać, wykonywać i wywoływać tylko skrypty utworzone w języku ActionScript 1.0 i 2.0.

Obsługiwana funkcjonalność

Treści utworzone w językach ActionScript 1.0 i 2.0

Treści utworzone w języku ActionScript 3.0

Może ładować treści i wykonywać kod utworzony w następujących językach:

tylko ActionScript 1.0 i 2.0

ActionScript 1.0 i 2.0 oraz ActionScript 3.0

Może wywoływać skrypty utworzone w następujących językach:

tylko ActionScript 1.0 i 2.0 (ActionScript 3.0 przez obiekt LocalConnection)

ActionScript 1.0 i 2.0 przez obiekt LocalConnection

ActionScript 3.0