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:
-
Utworzyć nowy obiekt URLRequest z adresem URL pliku.
-
Utworzyć nowy obiekt Loader.
-
Wywołać metodą
load()
obiektu Loader, przekazując jako parametr instancję URLRequest.
-
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
|
|
|
|