LoaderContext und ApplicationDomain ändert sich mit Adobe AIR?

8

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.

    
Tyn 03.03.2009, 09:52
quelle

2 Antworten

14

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.

    
Tyn 03.03.2009, 10:37
quelle
1

das ist ein guter, danke:)

Noch ein Detail: allowLoadBytesCodeExecution ist jetzt eine Legacy-Eigenschaft, sie wurde in AIR 1.0 definiert. Ab AIR 2.0 verwenden Sie stattdessen allowCodeImport .

ciao, PG

    
pigiuz 09.01.2013 16:28
quelle

Tags und Links