Laden von Daten



SWF-Dateien können Daten von Servern in ActionScript laden und Daten von ActionScript an Server senden. Das Laden von Daten ist ein anderer Vorgang als das Laden von Medien, da die geladenen Informationen direkt in ActionScript erscheinen und nicht als Medien angezeigt werden. Im Allgemeinen können SWF-Dateien Daten aus ihren eigenen Domänen laden. In der Regel erfordern sie jedoch Richtliniendatei, um Daten aus anderen Domänen zu laden (siehe Kontrolloptionen für Websites (Richtliniendateien)).

Verwenden von URLLoader von URLStream

Sie können Daten laden, z. B. eine XML-Datei oder eine Textdatei. Die load()-Methoden der URLLoader- und der URLStream-Klasse unterliegen den Zugriffsberechtigungen in einer URL-Richtliniendatei.

Wenn Sie die load()-Methode zum Laden von Inhalten aus einer anderen Domäne verwenden als der, in der sich die diese Methode aufrufende SWF-Datei befindet, sucht Flash Player auf dem Server mit den geladenen Elementen nach einer URL-Richtliniendatei. Wenn eine Richtliniendatei vorhanden ist und sie den Zugriff auf die Domäne der ladenden SWF-Datei erteilt, können Sie die Daten laden.

Herstellen einer Verbindung mit Sockets

Flash Player sucht standardmäßig nach einer Socket-Richtliniendatei, die an Port 843 bereitgestellt wird. Wie bei URL-Richtliniendateien wird diese Datei als Masterrichtliniendatei bezeichnet.

Als Richtliniendateien in Flash Player 6 eingeführt wurden, gab es noch keine Unterstützung für Socket-Richtliniendateien. Verbindungen mit Socketservern wurden von einer Richtliniendatei am Standardspeicherort auf einem HTTP-Server an Port 80 auf dem gleichen Host wie der Socketserver autorisiert. Diese Funktion wird in Flash Player 9 noch unterstützt, nicht jedoch in Flash Player 10. In Flash Player 10 können ausschließlich Socket-Richtliniendateien Socketverbindungen autorisieren.

Socket-Richtliniendateien unterstützen ähnlich wie URL-Richtliniendateien eine „meta-policy“-Anweisung, die angibt, welche Ports Richtliniendateien bereitstellen können. Die standardmäßige „meta-policy“-Anweisung für Socket-Richtliniendateien ist jedoch „all“, nicht „master-only“. Flash Player geht somit davon aus, dass jedes Socket auf dem Host eine Socket-Richtliniendatei bereitstellen kann, sofern die Master-Richtliniendatei keine strikteren Einstellungen festlegt.

Der Zugriff auf Socket- und XML-Socketverbindungen ist standardmäßig deaktiviert, selbst wenn sich das Socket, zu dem Sie eine Verbindung herstellen möchten, in der gleichen Domäne wie die SWF-Datei befindet. Um den Zugriff auf Socketebene zuzulassen, müssen Sie eine Socket-Richtliniendatei in einem der folgenden Speicherorte bereitstellen:

  • Port 843 (Speicherort der Master-Richtliniendatei)

  • Der gleiche Port wie die Socket-Hauptverbindung

  • Ein anderer Port als die Socket-Hauptverbindung

Flash Player sucht standardmäßig an Port 843 sowie an dem Port der Socket-Hauptverbindung nach einer Socket-Richtliniendatei. Wenn Sie eine Socket-Richtliniendatei an einem anderen Port bereitstellen möchten, muss die SWF-Datei die Methode Security.loadPolicyFile() aufrufen.

Eine Socket-Richtliniendatei weist die gleiche Syntax wie eine URL-Richtliniendatei auf, sie gibt jedoch zusätzlich die Ports an, für die Zugriff gewährt wird. Wenn eine Socket-Richtliniendatei von einer Portnummer unter 1024 bereitgestellt wird, kann sie Zugriff auf beliebige Ports gewähren. Stammt sie dagegen von Port 1024 oder höher, kann sie nur Zugriff auf Port 1024 und höher gewähren. Die zulässigen Ports werden in einem to-ports-Attribut im <allow-access-from>-Tag angegeben. Einstellige Portnummern, Portbereiche und Platzhalterzeichen sind zulässig.

Im Folgenden finden Sie ein Beispiel für eine Socket-Richtliniendatei:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<!-- Policy file for xmlsocket://socks.mysite.com --> 
<cross-domain-policy>  
    <allow-access-from domain="*" to-ports="507" />  
    <allow-access-from domain="*.example.com" to-ports="507,516" />  
    <allow-access-from domain="*.example.org" to-ports="516-523" />  
    <allow-access-from domain="adobe.com" to-ports="507,516-523" />  
    <allow-access-from domain="192.0.34.166" to-ports="*" />  
</cross-domain-policy> 

Um eine Socket-Richtliniendatei an Port 843 oder dem gleichen Port wie die Socket-Hauptverbindung abzurufen, rufen Sie die Methode Socket.connect() oder XMLSocket.connect() auf. Flash Player sucht zunächst eine Master-Richtliniendatei an Port 843. Wenn eine Master-Richtliniendatei gefunden wird, überprüft Flash Player, ob die Datei eine „meta-policy“-Anweisung enthält, die Socket-Richtliniendateien am Zielport untersagt. Ist der Zugriff zulässig, sucht Flash Player in der Master-Richtliniendatei zunächst nach der zugehörigen allow-access-from-Anweisung. Wird keine Master-Richtliniendatei gefunden, sucht Flash Player am gleichen Port wie die Socket-Hauptverbindung nach einer Socket-Richtliniendatei.

Um eine Socket-Richtliniendatei aus einem anderen Speicherort abzurufen, müssen Sie zunächst die Methode Security.loadPolicyFile() mit der speziellen "xmlsocket"-Syntax aufrufen. Dies wird im folgenden Beispiel gezeigt:

Security.loadPolicyFile("xmlsocket://server.com:2525"); 

Rufen Sie die Methode Security.loadPolicyFile() auf, bevor Sie die Socket.connect()- oder XMLSocket.connect()-Methode aufrufen. In diesem Fall wartet Flash Player, bis Ihre Richtliniendateianforderung erfüllt wurde. Erst dann entscheidet es, ob Ihre Hauptverbindung zugelassen wird. Wenn die Master-Richtliniendatei jedoch festlegt, dass das Zielverzeichnis keine Richtliniendateien bereitstellen kann, hat der Aufruf der Methode loadPolicyFile() keine Auswirkung, selbst wenn in diesem Verzeichnis eine Richtliniendatei vorhanden ist.

Wenn Sie einen Socketserver implementieren und eine Socket-Richtliniendatei bereitstellen müssen, entscheiden Sie, ob die Richtliniendatei an dem gleichen Port bereitgestellt werden soll, der Hauptverbindungen akzeptiert, oder ob Sie einen anderen Port verwenden möchten. In beiden Fällen muss der Server auf die erste Übertragung vom Client warten, bevor er eine Antwort sendet.

Wenn Flash Player eine Richtliniendatei anfordert, überträgt es nach dem Herstellen der Verbindung immer zuerst den folgenden String:

<policy-file-request/>

Erst nachdem der Server diesen String empfangen hat, kann er die Richtliniendatei senden. Die Anforderung von Flash Player wird immer durch ein Nullbyte beendet und die Antwort des Servers muss ebenfalls auf ein Nullbyte enden.

Erwarten Sie nicht, dass die gleiche Verbindung für die Richtliniendateianforderung und die Hauptverbindung verwendet wird. Sie müssen die Verbindung nach Übertragung der Richtliniendatei schließen. Andernfalls schließt Flash Player die Verbindung für die Richtliniendatei, bevor die Hauptverbindung eingerichtet wird.

Senden von Daten

Das Senden von Daten findet statt, wenn ein ActionScript-Code aus einer SWF-Datei Daten an einen Server oder eine Ressource sendet. Das Senden von Daten ist für SWF-Dateien in der Netzwerkdomäne immer gestattet. Eine lokale SWF-Datei kann nur dann Daten an Netzwerkadressen senden, wenn sie sich in der „local-trusted“- oder „local-with-networking“-Sandbox befindet. Weitere Informationen finden Sie unter Lokale Sandboxen.

Zum Senden von Daten an eine URL können Sie die Funktion flash.net.sendToURL() verwenden. Andere Methoden senden ebenfalls Anforderungen an URLs. Hierzu gehören ladende Methoden wie Loader.load() und Sound.load() und datenladende Methoden wie URLLoader.load() und URLStream.load().

Hoch- und Herunterladen von Dateien

Mit der Methode FileReference.upload() starten Sie das Hochladen einer ausgewählten Datei auf einen Remote-Server. Bevor Sie die FileReference.upload()-Methode aufrufen können, müssen Sie die FileReference.browse()- oder die FileReferenceList.browse()-Methode aufrufen.

Das ActionScript, das die Methode FileReference.browse() oder FileReferenceList.browse() initiiert, kann nur als Reaktion auf ein Maus- oder ein Tastaturereignis aufgerufen werden. Wird es in anderen Situationen aufgerufen, lösen Flash Player 1.0 und neuere Versionen eine Ausnahme aus.

Das Aufrufen der Methode FileReference.download() öffnet ein Dialogfeld, in dem der Benutzer eine Datei zum Herunterladen von einem Remote-Server auswählen kann.

Hinweis: Wenn der Server eine Benutzerauthentifizierung erfordert, kann der Benutzer nur bei SWF-Dateien, die in einem Browser — also mit einem Browser-Plug-In oder einer ActiveX-Steuerung — ausgeführt werden, in einem Dialogfeld zur Eingabe eines Benutzernamens und eines Kennworts zur Authentifizierung aufgefordert werden. Dies gilt darüber hinaus nur für Download-Vorgänge. Flash Player gestattet nicht das Hochladen auf einen Server, der eine Benutzerauthentifizierung erfordert.

Das Hoch- und Herunterladen wird nicht gestattet, wenn sich die aufrufende SWF-Datei in der „local-with-filesystem“-Sandbox befindet.

In der Standardeinstellung kann eine SWF-Datei nur das Hoch- und Herunterladen vom bzw. auf den eigenen Server initiieren. Eine SWF-Datei kann auch auf einen anderen Server hoch- bzw. davon herunterladen, wenn dieser Server eine Richtliniendatei bereitstellt, in der Zugriffsberechtigungen für die Domäne der aufrufenden SWF-Datei erteilt werden.