Wie man ein Flex SWF von einer entfernten Domäne mit Flash (AS3) aufruft
Wenn Sie jemals mit Flash und Flex gearbeitet haben, sind Sie möglicherweise auf den gefürchteten SecurityError
gestoßen, wenn Sie versucht haben, eine SWF-Datei von einer anderen Domäne aufzurufen. Dieser Fehler, insbesondere Error #2119
, kann ein Stolperstein in Ihrer Anwendungsentwicklung sein und eine nahtlose Interaktion zwischen SWFs, die auf verschiedenen Domänen gehostet werden, verhindern. Heute werden wir in das Problem eintauchen und erkunden, wie Sie dieses Problem effektiv mit ActionScript 3 (AS3) lösen können.
Das Problem: Sicherheits-Sandbox-Verletzung
Stellen Sie sich vor, Sie haben ein Flex SWF, das auf einer Domäne gehostet wird, sagen wir, http://www.a.com/a.swf
, und Sie möchten ein anderes SWF, http://services.nuconomy.com/n.swf
, von einer anderen Domäne laden. Ihr Code könnte etwa so aussehen:
_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderFinish);
_loader.load(req);
Bei der Ausführung erhalten Sie jedoch folgende Ausnahme:
SecurityError: Error #2119: Sicherheits-Sandbox-Verletzung: Aufrufer http://localhost.service:1234/flashTest/Main.swf kann nicht auf LoaderInfo.applicationDomain zugreifen, das von http://www.b.com/b.swf gehört.
Dieser Fehler tritt im Allgemeinen auf, weil der Flash Player Sicherheits-Sandbox-Beschränkungen durchsetzt, die verhindern, dass SWF-Dateien, die von verschiedenen Domänen bereitgestellt werden, direkt miteinander interagieren.
Die Lösung: Zugriff gewähren mit Security.allowDomain()
Um den Zugriff über Domänen hinweg zu ermöglichen, müssen Sie explizit die Erlaubnis mit der Methode Security.allowDomain()
in ActionScript erteilen. So richten Sie diese Lösung effektiv ein:
Schritt 1: SWF, das Sie laden möchten, modifizieren
In der SWF-Datei, die Sie laden möchten (wir nennen sie http://services.nuconomy.com/n.swf
), müssen Sie den folgenden Code-Snippet hinzufügen:
import flash.system.Security;
// Erlauben Sie die Domäne, die mit diesem SWF interagiert
Security.allowDomain("http://localhost.service:1234");
Schritt 2: Security.allowDomain() korrekt implementieren
- Mehrere Domänen: Wenn Ihre Anwendung den Zugriff von verschiedenen Domänen benötigen, können Sie
Security.allowDomain()
mehrmals für jede Domäne aufrufen. - Best Practices: Seien Sie vorsichtig mit der umfangreichen Verwendung von
allowDomain()
, da dies Ihre SWF-Datei Sicherheitsanfälligkeiten aussetzen kann. Erlauben Sie nur vertrauenswürdige Domänen.
Schritt 3: Testen Sie Ihre Konfiguration
Sobald Sie den SWF-Code aktualisiert haben, können Sie Ihre Anwendung erneut ausführen. Wenn alles korrekt eingestellt ist, sollten Sie in der Lage sein, Klassen aus dem entfernten SWF zu laden, ohne Sicherheitsverstöße auszulösen.
Zusätzliche Ressourcen
Für ein besseres Verständnis können Sie auf die umfangreiche Dokumentation von Adobe zur Sicherheit in Flash zurückgreifen. Werfen Sie einen Blick auf The Adobe Flex 3 Programming ActionScript 3 PDF, insbesondere Kapitel 27, das die Sicherheit von Flash Player und Cross-Scripting behandelt.
Fazit
Auf Sicherheits-Sandbox-Verletzungen zu stoßen, kann frustrierend sein, insbesondere wenn Sie versuchen, Funktionen zu implementieren, die die Funktionalität Ihrer Anwendung verbessern. Glücklicherweise können Sie mit der Methode Security.allowDomain()
diese Einschränkungen leicht umgehen und eine nahtlose Kommunikation zwischen SWFs von verschiedenen Domänen ermöglichen. Implementieren Sie es sorgfältig, gewähren Sie nur vertrauenswürdigen Domänen Zugriff, und Sie sind auf dem besten Weg zu einer erfolgreichen Integration.
Denken Sie daran, dass sichere Programmierpraktiken entscheidend für die Aufrechterhaltung der Integrität Ihrer Anwendungen in einer vernetzten Umgebung sind.