Ich experimentiere gerade mit dem Laden externer SWF-Dateien von einer Standard-AS3-Anwendung und einer AIR-Anwendung. Es scheint, dass die AIR-Anwendung nicht so funktioniert wie eine vom Flash Player ausgeführte Standard-SWF.
Gemäß der Dokumentation , der Eigenschaft applicationDomain
of LoaderContext
ist auch in einer AIR-Anwendung verwendbar, scheint aber nicht zu funktionieren.
Ich habe den folgenden Code:
%Vor%Wenn Sie diesen Code als SWF-Datei kompilieren und mit dem Flash Player starten, wird diese Ausgabe korrekt angezeigt:
%Vor%Aber derselbe Code wie eine AIR-Anwendung führt eine andere Ausgabe aus:
%Vor% Laut der Dokumentation ist die erste Ausgabe (mit SWF mit Flash Player und nicht mit einer AIR-Anwendung) die richtige. Wenn Sie mit diesem Snippet experimentieren und die Anwendungsdomäne auf andere mögliche Konfigurationen (wie new ApplicationDomain(null)
oder ApplicationDomain.currentDomain
) ändern, wird genau das gesagt, was die Dokumentation mit der SWF sagt, aber nicht die Ausgabe der AIR-Anwendung.
Gibt es Anhaltspunkte dafür, warum AIR die Anwendungsdomäne ignoriert, die an den Loader-Kontext übergeben wird? Irgendwelche Unterlagen zu diesem speziellen Problem?
Vielen Dank.
Verstanden.
Das Problem wurde durch ein anderes Verhalten im System SecurityDomain
in einer AIR-Anwendung verursacht. Wenn eine SWF-Datei in eine AIR-Anwendung geladen wird, hängt sie immer von einer anderen Sandbox ab. Daher erstellt AIR für diese SWF eine neue SecurityDomain
.
Da eine SecurityDomain
eine Gruppe aus einem oder mehreren ApplicationDomain
s ist, erzwang dieses Verhalten die Erstellung einer neuen ApplicationDomain
(innerhalb der neuen SecurityDomain
), die angegebene (die zu der main ' SecurityDomain
).
Es gibt eine Problemumgehung mit URLLoader
. Beim Laden von bytecode (mit Loader.loadBytes
) wird eine SWF innerhalb derselben SecurityDomain
geladen. Deshalb müssen Sie allowLoadBytesCodeExecution
auf "true" setzen, da dies nicht sicher sein kann. Wenn Sie also die SWF-Datei indirekt laden, lösen Sie zuerst ein URLLoader
und dann mit Loader.loadBytes
das Problem.
Hier ist das Snippet:
%Vor%Hoffe, das hilft.
Tags und Links flash actionscript-3 flex air