Ładowanie treści

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

Treść w środowiskach wykonawczych Flash Player i AIR może ładować inne treści różnego typu, między innymi:

  • Pliki SWF

  • Obrazy

  • Dźwięk

  • Wideo

  • Pliki HTML (tylko środowisko AIR)

  • Pliki JavaScript (tylko środowisko AIR)

Ładowanie plików SWF i obrazów za pomocą klasy Loader

Klasa Loader służy do ładowania plików SWF oraz obrazów (plików JPG, GIF lub PNG). Dowolny plik SWF inny niż ten znajdujący się w obszarze izolowanym lokalnym z systemem plików, może ładować pliki SWF z dowolnej domeny sieciowej. Tylko pliki SWF w lokalnych obszarach izolowanych mogą ładować pliki SWF oraz obrazy z lokalnego systemu plików. Pliki SWF w obszarze izolowanym lokalnym z siecią mogą ładować wyłącznie pliki SWF znajdujące się w obszarze izolowanym zaufanym lub lokalnym z siecią. Pliki SWF w obszarze izolowanym lokalnym z siecią mogą ładować wyłącznie treść lokalną inną niż pliki SWF (np. obrazy), nie mogą one jednak uzyskiwać dostępu do danych ładowanej treści.

Przy ładowaniu pliku SWF z niezaufanego źródła (jak na przykład domena inna niż głównego pliku SWF obiektu Loader) przydatne jest definiowanie maski dla obiektu Loader, w celu uniemożliwienia pobierania przez ładowaną zawartość (podrzędną wobec obiektu Loader) na stół montażowy elementów niezgodnych z maską, tak jak przedstawia to poniższy kod:

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);

Wywołując metodę load() obiektu Loader, można określić parametr context , którym należy uczynić obiekt LoaderContext. Klasa LoaderContext zawiera trzy właściwości, które umożliwiają zdefiniowanie kontekstu używania wczytanej zawartości:

  • checkPolicyFile : ta właściwość powinna być używana tylko w przypadku ładowania pliku obrazu (nie pliku SWF). Metodę należy określić dla pliku obrazu z domeny innej niż domena pliku zawierającego obiekt Loader. Jeśli dla tej właściwości zostanie ustawiona wartość true , obiekt Loader sprawdzi serwer pochodzenia pliku strategii URL (patrz Internetowe elementy sterujące (pliki zasad) ). Jeśli serwer uzyska dostęp do domeny Loader, wówczas kod ActionScript z plików SWF w domenie Loader będzie mógł uzyskać dostęp do danych z załadowanego obrazu. Za pomocą właściwości Loader.content można uzyskać odniesienie do obiektu bitmapowego reprezentującego wczytany obraz. Metody BitmapData.draw() i BitmapData.drawWithQuality() pozwalają uzyskać dostęp do pikseli wczytanego obrazu. Metoda drawWithQuality jest dostępna w programie Flash Player 11.3 lub nowszym oraz środowisku AIR 3.3 lub nowszym.

  • securityDomain : z tej właściwości można korzystać tylko podczas ładowania pliku SWF (nie obrazu). Metodę należy określić dla pliku SWF z domeny innej niż domena pliku zawierającego obiekt Loader. Obecnie dla właściwości securityDomain obsługiwane są wyłącznie dwie wartości: null (wartość domyślna) oraz SecurityDomain.currentDomain . W przypadku określenia wartości SecurityDomain.currentDomain , żąda ona zaimportowania załadowanego pliku SWF do obszaru izolowanego ładowanego pliku SWF, co oznacza, że działa ona tak, jakby załadowany plik został załadowany z własnego serwera plików SWF. Jest to dopuszczalne wyłącznie, jeśli na serwerze ładowanego pliku SWF zostanie znaleziony plik strategii URL, umożliwiający dostęp za pośrednictwem domeny ładującego pliku SWF. W przypadku znalezienia żądanego pliku strategii obiekt ładujący oraz ładowany mogą swobodnie rozpocząć wymienianie między sobą skryptów niezwłocznie po rozpoczęciu ładowania, ponieważ znajdują się w tym samym obszarze chronionym. Należy zauważyć, że importujący obszar chroniony może w większości zostać zastąpiony przez wykonanie typowego ładowania, a następnie wywołanie przez załadowany plik SWF metody Security.allowDomain() . Ta druga metoda może okazać się prostsza w użyciu, ponieważ załadowany plik SWF będzie następnie znajdował się we własnym, naturalnym obszarze chronionym, a zatem będzie miał dostęp do zasobów na własnym, rzeczywistym serwerze.

  • applicationDomain : ta właściwość powinna być używana wyłącznie podczas ładowania pliku SWF zapisanego w języku ActionScript 3.0 (a nie obrazu lub pliku SWF zapisanego w języku ActionScript 1.0 lub 2.0). Ładując plik, można wskazać konkretną domenę aplikacji, w której ma on zostać umieszczony; domyślnie jest on umieszczany w nowej domenie aplikacji stanowiącej element potomny domeny aplikacji ładującego pliku SWF. Należy zauważyć, że domeny aplikacji są podjednostkami domen zabezpieczeń, a zatem można określić docelową domenę aplikacji tylko, jeśli ładowany plik SWF pochodzi z własnej domeny zabezpieczeń, lub ponieważ został pomyślnie zaimportowany do domeny zabezpieczeń korzystającej z właściwości securityDomain . W przypadku określenia domeny aplikacji, gdy jednocześnie ładowany plik SWF jest częścią innej domeny zabezpieczeń, wskazywana domena ( applicationDomain ) jest ignorowana. Więcej informacji zawiera sekcja Praca z domenami aplikacji .

Szczegółowe informacje zawiera sekcja Określanie kontekstu ładowania .

Ważną właściwością obiektu Loader jest właściwość contentLoaderInfo , będąca obiektem LoaderInfo. Inaczej niż w przypadku większości obiektów, obiekt LoaderInfo jest współużytkowany przez ładujący plik SWF oraz ładowaną treść SWF; jest on zawsze dostępny dla obu części. Jeśli ładowana treść jest plikiem SWF, może ona uzyskać dostęp do obiektu LoaderInfo za pośrednictwem właściwości DisplayObject.loaderInfo . Obiekty LoaderInfo obejmują informacje takie jak postęp ładowania, adresy URL obiektu ładującego i ładowanego zaufane relacje między obiektem ładującym a ładowany oraz inne informacje. Więcej informacji zawiera sekcja Monitorowanie postępu ładowania .

Ładowanie dźwięku i wideo

Wszystkie treści, poza tymi w obszarze izolowanym lokalnym z systemem plików, mogą ładować dźwięk i wideo z lokalizacji sieciowych za pośrednictwem metod Sound.load() , NetConnection.connect() i NetStream.play() .

Tylko treści w obszarach izolowanych lokalnych z systemem plików i środowiska AIR mogą ładować multimedia z lokalnego systemu plików. Tylko treści w obszarze izolowanym lokalnym z systemem plików, obszarze izolowanym środowiska AIR lub lokalnym zaufanym obszarze izolowanym mogą mieć dostęp do danych w tych załadowanych plikach.

Istnieją również inne ograniczenia dotyczące uzyskiwania dostępu do danych z ładowanych multimediów. Szczegółowe informacje zawiera sekcja Załadowane multimedia jako dane .

Ładowanie plików SWF i obrazów za pomocą znaczników <img> w polu tekstowym

Możliwe jest ładowanie plików SWF oraz bitmap do pola tekstowego za pomocą znacznika <img> , zgodnie z ilustracją w poniższym kodzie:

<img src = 'filename.jpg' id = 'instanceName' >

Możliwe jest uzyskiwanie dostępu do ładowanej w ten sposób treści za pomocą metody getImageReference() instancji TextField, zgodnie z poniższym kodem:

var loadedObject:DisplayObject = myTextField.getImageReference('instanceName');

Należy jednak zwrócić uwagę, że pliki SWF oraz obrazy ładowane w ten sposób są umieszczane w obszarze izolowanym odpowiadającym ich pochodzeniu.

Podczas ładowania pliku obrazu za pomocą znacznika <img> w polu tekstowym dostęp do danych w obrazie może być dozwolony przez plik strategii URL. Możliwe jest poszukiwanie pliku strategii po dodaniu atrybutu checkPolicyFile do znacznika <img> , zgodnie z poniższym kodem:

<img src = 'filename.jpg' checkPolicyFile = 'true' id = 'instanceName' >

Podczas ładowania SWF za pomocą znacznika <img> w polu tekstowym możliwe jest zezwolenie na dostęp do danych tego pliku SWF za pośrednictwem metody Security.allowDomain() .

Użycie znacznika <img> w polu tekstowym do załadowania pliku zewnętrznego (w przeciwieństwie do użycia klasy Bitmap osadzonej w pliku SWF) powoduje, że automatycznie tworzony jest obiekt Loader jako element potomny obiektu TextField, a plik zewnętrzny jest ładowany to tego obiektu Loader zupełnie tak, jakby obiekt Loader został użyty w języku ActionScript do załadowania pliku. W takim przypadku metoda getImageReference() zwraca obiekt Loader, który został utworzony automatycznie. W celu uzyskania dostępu do tego obiektu Loader nie jest konieczna żadna kontrola zabezpieczeń, ponieważ znajduje się on w tym samym obszarze izolowanym zabezpieczeń, co kod wywołujący.

W przypadku odwoływania się do właściwości content obiektu Loader w celu uzyskiwania dostępu do ładowanych multimediów mają zastosowanie reguły zabezpieczeń. Jeśli treść jest obrazem, konieczne jest zaimplementowanie pliku strategii URL, a jeśli treść jest plikiem SWF, to konieczne jest wywołanie za pośrednictwem kodu pliku SWF metody allowDomain() .

Środowisko Adobe AIR

W obszarze izolowanym aplikacji znaczniki <img> w polu tekstowym są ignorowane, co ma na celu zapobieganie atakom phishingowym. Ponadto kod działający w obszarze izolowanym aplikacji nie ma uprawnień do wywoływania metody allowDomain() klasy Security.

Zawartość dostarczana przy użyciu serwerów RTMP

Serwer Flash Media Server udostępnia dane, audio i wideo za pośrednictwem protokołu RTMP (Real-Time Media Protocol). Te dane multimedialne można załadować przy użyciu metody connect() klasy NetConnection, przekazując jako parametr adres URL serwera RTMP. Serwer Flash Media Server może zezwalać tylko na określone połączenia i blokować pobieranie zawartości na podstawie domeny pliku wysyłającego żądanie. Więcej szczegółów zawiera dokumentacja serwera Flash Media Server dostępna pod adresem www.adobe.com/go/learn_fms_docs_pl .

W celu użycia metod BitmapData.draw() , BitmapData.drawWithQuality() i SoundMixer.computeSpectrum() do wyodrębnienia danych graficznych i dźwiękowych środowiska wykonawczego ze strumieni RTMP należy przyznać dostęp do serwera. Aby przyznać dostęp do określonych katalogów na serwerze Flash Media Server, należy użyć właściwości Client.videoSampleAccess oraz Client.audioSampleAccess serwerowego języka ActionScript. Więcej informacji zawiera publikacja Dokumentacja języka ActionScript po stronie serwera . Metoda drawWithQuality jest dostępna w programie Flash Player 11.3 lub nowszym oraz środowisku AIR 3.3 lub nowszym.