Laden von Inhalten



Eine SWF-Datei kann die folgenden Inhaltstypen laden:

  • SWF-Dateien

  • Bilder

  • Sound

  • Video

Laden von SWF-Dateien und Bildern

Mit der Loader-Klasse können Sie SWF-Dateien und Bilder (JPG-, GIF- oder PNG-Dateien) laden. Jede SWF-Datei, außer SWF-Dateien in der „local-with-filesystem“-Sandbox, kann SWF-Dateien und Bilder aus einer beliebigen Netzwerkdomäne laden. Nur SWF-Dateien in lokalen Sandboxen können SWF-Dateien und Bilder aus dem lokalen Dateisystem laden. Dateien in der „local-with-networking“-Sandbox können nur lokale SWF-Dateien laden, die sich in der „local-trusted“- oder der „local-with-networking“-Sandbox befinden. SWF-Dateien in der „local-with-networking“-Sandbox können neben SWF-Dateien auch andere lokale Inhalte (z. B. Bilder) laden, sie können jedoch nicht auf die Daten im geladenen Inhalt zugreifen.

Wenn Sie eine SWF-Datei aus einer nicht vertrauenswürdigen Quelle laden (etwa einer Domäne, die nicht mit der SWF-Stammdatei des Loader-Objekts übereinstimmt), empfiehlt es sich, eine Maske für das Loader-Objekt zu definieren. Dadurch wird verhindert, dass der geladene Inhalt (der dem Loader-Objekt untergeordnet ist) in Bereichen der Bühne gezeichnet wird, die außerhalb dieser Maske liegen. Ein Beispiel hierfür finden Sie im folgenden Code:

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

Wenn Sie die load()-Methode des Loader-Objekts aufrufen, können Sie einen context-Parameter angeben, bei dem es sich um ein LoaderContext-Objekt handelt. 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 eines Bilds (und nicht beim Laden einer SWF-Datei). Dies ist nur dann notwendig, wenn eine Bilddatei aus einer anderen Domäne stammt als die Datei, die das Loader-Objekt enthält. Wenn Sie diese Eigenschaft auf true festlegen, sucht der Loader auf dem Ursprungsserver nach einer URL-Richtliniendatei (siehe Kontrolloptionen für Websites (Richtliniendateien)). Wenn der Server Zugriffsrechte für die Loader-Domäne erteilt, kann ActionScript aus SWF-Dateien in der Loader-Domäne auf Daten im geladenen Bild zugreifen. Anders ausgedrückt, Sie können mit der Eigenschaft Loader.content einen Verweis auf das Bitmap-Objekt erhalten, das ein geladenes Bild darstellt; oder Sie verwenden die Methode BitmapData.draw(), um auf die Pixel des geladenen Bilds zuzugreifen.

  • securityDomain: Verwenden Sie diese Eigenschaft nur beim Laden einer SWF-Datei (und 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. Für die Eigenschaft securityDomain werden derzeit nur zwei Werte unterstützt: null (Standardwertdefault) und SecurityDomain.currentDomain. Wenn Sie SecurityDomain.currentDomain einstellen, muss die geladene SWF-Datei in die Sandbox der ladenden SWF-Datei importiert werden. Mit anderen Worten, sie wird so behandelt, als ob sie vom eigenen Server der ladenden SWF-Datei geladen wurde. Dies ist nur dann zulässig, wenn sich eine URL-Richtliniendatei auf dem Server der geladenen SWF-Datei befindet, die den Zugriff auf die Domäne der ladenden SWF-Datei gewährt. Wenn die erforderliche Richtliniendatei gefunden wurde, haben die ladende und die geladene Datei mit Beginn des Ladens gegenseitigen Skriptzugriff, da sich beide Dateien in der gleichen Sandbox befinden. Beachten Sie, dass das Sandbox-Importieren weitestgehend durch das Ausführen eines regulären Ladevorgangs und das Aufrufen der Methode Security.allowDomain() durch die geladene SWF-Datei ersetzt werden kann. Das zuletzt genannte Verfahren ist einfacher anzuwenden, da sich die geladene SWF-Datei in ihrer eigenen natürlichen Sandbox befindet und auf Ressourcen auf ihrem eigenen Server zugreifen kann.

  • 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 angeben, dass die Datei nicht wie in der Standardeinstellung in einer neuen Anwendungsdomäne (bei der es sich um ein untergeordnetes Element der Anwendungsdomäne der ladenden SWF-Datei handelt), sondern in einer bestimmten Anwendungsdomäne abgelegt werden soll. Beachten Sie, dass Anwendungsdomänen Untereinheiten von Sicherheitsdomänen sind. Aus diesem Grund können Sie nur dann eine Ziel-Anwendungsdomäne angeben, wenn die von Ihnen geladene SWF-Datei aus Ihrer eigenen Sicherheitsdomäne stammt (entweder stammt sie von Ihrem Server oder Sie haben sie mit der Eigenschaft securityDomain erfolgreich in Ihre Sicherheitsdomäne importiert). Wenn Sie eine Anwendungsdomäne angegeben haben, die geladene SWF-Datei aber Teil einer anderen Sicherheitsdomäne ist, wird die Domäne, die Sie in applicationDomain angegeben haben, ignoriert. Weitere Informationen finden Sie unter Verwenden der ApplicationDomain-Klasse.

Weitere Informationen finden Sie unter Angabe des zu ladenden Kontextes.

Eine wichtige Eigenschaft eines Loader-Objekts ist contentLoaderInfo, bei der es sich um ein LoaderInfo-Objekt handelt. Im Gegensatz zu den meisten anderen Objekten wird ein LoaderInfo-Objekte von der ladenden SWF-Datei und dem geladenen Inhalt gemeinsam genutzt und beide Parteien können immer darauf zugreifen. Handelt es sich bei dem geladenen Inhalt um eine SWF-Datei, kann sie über die Eigenschaft DisplayObject.loaderInfo auf das LoaderInfo-Objekt zugreifen. LoaderInfo-Objekte enthalten Informationen wie den Ladefortschritt, die URLs der ladenden und der geladenen Dateien, die Vertrauensbeziehungen zwischen ladender und geladener Datei und andere Daten. Weitere Informationen finden Sie unter Überwachen des Ladevorgangs.

Laden von Sound und Video

Alle SWF-Dateien, außer denen in der „local-with-filesystem“-Sandbox, können Sound und Video mit den Methoden Sound.load(), NetConnection.connect() und NetStream.play() aus dem Netzwerk laden.

Nur SWF-Dateien können Medien aus dem lokalen Dateisystem laden. Nur SWF-Dateien in der „local-with-filesystem“- oder der „local-trusted“-Sandbox können auf Daten in diesen geladenen Dateien zugreifen.

Es gelten noch weitere Einschränkungen für den Zugriff auf Daten in geladenen Medien. Weitere Informationen finden Sie unter Zugriff auf geladene Medien als Daten.

Laden von SWF-Dateien und Bildern mit dem <img>-Tag in einem Textfeld

Mit dem <img>-Tag können Sie SWF-Dateien und Bitmaps in ein Textfeld laden. Dies wird im folgenden Beispielcode gezeigt:

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

Auf Inhalte, die auf diese Weise geladen wurden, können Sie mit der getImageReference()-Methode der TextField-Instanz zugreifen, wie im folgenden Code dargestellt:

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

Beachten Sie jedoch, dass SWF-Dateien und Bilder, die auf diese Weise geladen wurden, einer ihrem Ursprung entsprechenden Sandbox zugewiesen werden.

Wenn Sie eine Bilddatei mit dem <img>-Tag in einem Textfeld laden, kann der Zugriff auf die Daten im Bild durch eine URL-Richtliniendatei gestattet sein. Sie können das Vorhandensein einer Richtliniendatei prüfen, indem Sie ein checkPolicyFile-Attribut zum <img>-Tag hinzufügen, wie im folgenden Code dargestellt:

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

Wenn Sie eine SWF-Datei mit einem <img>-Tag in einem Textfeld laden, können Sie den Zugriff auf die Daten dieser SWF-Datei über einen Aufruf der Methode Security.allowDomain() gewähren.

Verwenden Sie jedoch ein <img>-Tag in einem Textfeld, um eine externe Datei zu laden (anstelle einer Bitmap-Klasse, die in Ihre SWF-Datei eingebettet ist), wird automatisch ein Loader-Objekt als untergeordnetes Element des TextField-Objekts erstellt. Die externe Datei wird in diesen Loader geladen, als ob Sie in ActionScript ein Loader-Objekt zum Laden der Datei verwendet hätten. In diesem Fall gibt die Methode getImageReference() den automatisch erstellten Loader zurück. Für den Zugriff auf dieses Loader-Objekt ist keine Sicherheitsprüfung erforderlich, da es sich in der gleichen Sicherheits-Sandbox wie der aufrufende Code befindet.

Wenn Sie jedoch auf die content-Eigenschaft des Loader-Objekts verweisen, um auf die geladenen Medien zuzugreifen, kommen Sicherheitsregeln zum Einsatz. Handelt es sich bei dem Inhalt um ein Bild, müssen Sie eine URL-Richtliniendatei implementieren. Handelt es sich bei dem Inhalt um eine SWF-Datei, muss der Code in der SWF-Datei die Methode allowDomain() aufrufen.

Über RTMP-Server bereitgestellte Inhalte

Flash Media Server verwendet zur Bereitstellung von Daten, Audio und Video das Real-Time Media Protocol (RTMP-Protokoll). Eine SWF-Datei lädt diese Medien mit der connect()-Methode der NetConnection-Klasse und übergibt einen RTMP-URL als Parameter. Flash Media Server kann basierend auf der Domäne der anfordernden Datei Verbindungen einschränken und verhindern, dass Inhalte heruntergeladen werden. Weitere Informationen können Sie der Flash Media Server-Dokumentation entnehmen.

Bei Medien, die von RTMP-Quellen geladen werden, können Sie die Methoden BitmapData.draw() und SoundMixer.computeSpectrum() nicht verwenden, um Echtzeit-Grafiken und Sounddaten zu extrahieren.