Dynamisches Laden von Anzeigeinhalten

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Sie können eines der folgenden externen Anzeigeelemente in eine ActionScript 3.0-Anwendung laden:

  • Eine in ActionScript 3.0 erstellte SWF-Datei – diese Datei kann ein Sprite, MovieClip oder eine andere Klasse sein, die Sprite erweitert.

  • Eine Bilddatei – hierzu gehören JPG-, PNG- und GIF-Dateien.

  • Eine AVM1 SWF-Datei – dies ist eine in ActionScript 1.0 oder 2.0 geschriebene SWF-Datei.

Diese Anzeigeelemente können Sie mit der Loader-Klasse laden.

Laden von Anzeigeobjekten

Loader-Objekte dienen zum Laden von SWF- und Grafikdateien in eine Anwendung. Die Loader-Klasse ist eine Unterklasse der DisplayObjectContainer-Klasse. Ein Loader-Objekt kann nur ein untergeordnetes Anzeigeobjekt in seiner Anzeigeliste enthalten – das Anzeigeobjekt, das die geladene SWF- oder Grafikdatei darstellt. Wenn Sie der Anzeigeliste ein Loader-Objekt hinzufügen (wie im folgenden Code), haben Sie der Anzeigeliste auch das geladene untergeordnete Anzeigeobjekt hinzugefügt (nachdem es geladen wurde):

var pictLdr:Loader = new Loader(); 
var pictURL:String = "banana.jpg" 
var pictURLReq:URLRequest = new URLRequest(pictURL); 
pictLdr.load(pictURLReq); 
this.addChild(pictLdr);

Wenn die SWF-Datei oder das Bild geladen ist, können Sie das geladene Anzeigeobjekt in einen anderen Anzeigeobjektcontainer verschieben, z. B. in das DisplayObjectContainer-Objekt container im folgenden Beispiel:

import flash.display.*; 
import flash.net.URLRequest; 
import flash.events.Event; 
var container:Sprite = new Sprite(); 
addChild(container); 
var pictLdr:Loader = new Loader(); 
var pictURL:String = "banana.jpg" 
var pictURLReq:URLRequest = new URLRequest(pictURL); 
pictLdr.load(pictURLReq); 
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);  
function imgLoaded(event:Event):void 
{ 
    container.addChild(pictLdr.content);  
}

Überwachen des Ladefortschritts

Wenn das Laden der Datei gestartet wurde, wird ein LoaderInfo-Objekt erstellt. Ein LoaderInfo-Objekt enthält Informationen wie den Ladefortschritt, die URLs des ladenden und des geladenen Objekts, die Gesamtanzahl der Byte für das Medium und die nominelle Höhe und Breite des Mediums. Ein LoaderInfo-Objekt löst darüber hinaus Ereignisse zur Überwachung des Ladefortschritts aus.

Das folgende Diagramm zeigt die verschiedenen Einsatzmöglichkeiten des LoaderInfo-Objekts – für die Instanz der Hauptklasse der SWF-Datei, für ein Loader-Objekt und für ein vom Loader-Objekt geladenes Objekt:

Auf das LoaderInfo-Objekt kann als Eigenschaft des Loader-Objekts und des geladenen Anzeigeobjekts zugegriffen werden. Sobald das Laden begonnen hat, kann über die Eigenschaft contentLoaderInfo des Loader-Objekts auf das LoaderInfo-Objekt zugegriffen werden. Wenn das Anzeigeobjekt vollständig geladen ist, kann über die Eigenschaft loaderInfo des Anzeigeobjekts als Eigenschaft des geladenen Anzeigeobjekts auf das LoaderInfo-Objekt zugegriffen werden. Die Eigenschaft loaderInfo des geladenen Anzeigeobjekts verweist auf das gleiche LoaderInfo-Objekt wie die Eigenschaft contentLoaderInfo des Loader-Objekts. Anders ausgedrückt, das geladene Objekt und das Loader-Objekt, das es geladen hat, verwenden dasselbe LoaderInfo-Objekt.

Um auf die Eigenschaften des geladenen Inhalts zugreifen zu können, müssen Sie dem LoaderInfo-Objekt einen Ereignis-Listener hinzufügen, wie im folgenden Code dargestellt:

import flash.display.Loader; 
import flash.display.Sprite; 
import flash.events.Event; 
 
var ldr:Loader = new Loader(); 
var urlReq:URLRequest = new URLRequest("Circle.swf"); 
ldr.load(urlReq); 
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); 
addChild(ldr); 
 
function loaded(event:Event):void 
{ 
    var content:Sprite = event.target.content; 
    content.scaleX = 2; 
}

Weitere Informationen finden Sie unter Verarbeiten von Ereignissen.

Festlegen des Ladekontexts

Wenn Sie eine externe Datei über die load()- oder loadBytes()-Methode der Loader-Klasse in Flash Player oder AIR laden, können Sie optional einen context-Parameter angeben. Bei diesem Parameter handelt es sich um ein LoaderContext-Objekt.

Die LoaderContext-Klasse umfasst drei Eigenschaften, mit denen Sie den Kontext definieren können, wie der geladene Inhalt verwendet werden kann:

  • checkPolicyFile: Verwenden Sie diese Eigenschaft nur beim Laden einer Bilddatei (nicht beim Laden einer SWF-Datei). Wenn Sie diese Eigenschaft auf true festlegen, sucht der Loader auf dem Ursprungsserver nach einer Richtliniendatei (siehe Kontrolloptionen für Websites (Richtliniendateien)). Dies ist nur dann notwendig, wenn Inhalte aus anderen Domänen stammen als die SWF-Datei, in der das Loader-Objekt enthalten ist. Wenn der Server Zugriff auf die Loader-Domäne gewährt, kann ActionScript aus SWF-Dateien in der Loader-Domäne auf Daten im geladenen Bild zugreifen. Anders ausgedrückt, Sie können mit dem Befehl BitmapData.draw() auf Daten im geladenen Bild zugreifen.

    Beachten Sie, dass eine SWF-Datei aus einer anderen Domäne als das Loader-Objekt Security.allowDomain() aufrufen kann, um eine bestimmte Domäne zuzulassen.

  • securityDomain: Verwenden Sie diese Eigenschaft nur beim Laden einer SWF-Datei (nicht beim Laden eines Bilds). Dies ist nur dann notwendig, wenn eine SWF-Datei aus einer anderen Domäne stammt als die Datei, die das Loader-Objekt enthält. Wenn Sie diese Option angeben, sucht Flash Player nach einer Richtliniendatei. Ist eine vorhanden, können SWF-Dateien aus Domänen, die in der domänenübergreifenden Richtliniendatei enthalten sind, auf den geladenen SWF-Inhalt verweisen (Cross-Scripting). Sie können flash.system.SecurityDomain.currentDomain als Parameter angeben.

  • applicationDomain: Verwenden Sie diese Eigenschaft nur beim Laden einer SWF-Datei, die in ActionScript 3.0 geschrieben wurde (nicht beim Laden eines Bilds oder einer SWF-Datei, die in ActionScript 1.0 oder 2.0 geschrieben wurde). Beim Laden der Datei können Sie festlegen, ob die Datei in die gleiche Anwendungsdomäne wie die des Loader-Objekts aufgenommen werden soll, indem Sie den Parameter applicationDomain auf flash.system.ApplicationDomain.currentDomain einstellen. Durch Einfügen der geladenen SWF-Datei in die gleiche Anwendungsdomäne können Sie direkt auf die zugehörigen Klassen zugreifen. Dies ist insbesondere beim Laden einer SWF-Datei von Nutzen, die eingebettete Medien enthält, auf die Sie über denen zugewiesenen Klassennamen zugreifen können. Weitere Informationen finden Sie unter Verwenden von Anwendungsdomänen.

Im Folgenden ist ein Beispiel für die Suche nach einer Richtliniendatei aufgeführt, wenn eine Bitmap aus einer anderen Domäne geladen wird:

var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/photo11.jpg"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);

Im Folgenden ist ein Beispiel für die Suche nach einer Richtliniendatei aufgeführt, wenn eine SWF-Datei aus einer anderen Domäne geladen wird, um diese Datei in der gleichen Sicherheits-Sandbox wie das Loader-Objekt zu platzieren. Darüber hinaus fügt der Code die Klassen in der geladenen SWF-Datei der gleichen Anwendungsdomäne wie das Loader-Objekt hinzu:

var context:LoaderContext = new LoaderContext(); 
context.securityDomain = SecurityDomain.currentDomain; 
context.applicationDomain = ApplicationDomain.currentDomain; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/library.swf"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);

Weitere Informationen finden Sie in der Beschreibung der LoaderContext-Klasse im Handbuch ActionScript 3.0 Reference for the Adobe Flash Platform.