Ł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