2010-11-18 7 views
2

Ich lade as2 SWF in AIR-Anwendung. Es funktioniert ordnungsgemäß beim Laden von Datei. Aber wenn aus Bytes geladen ist, wird es in irgendeiner Weise gebrochen (es reagiert Maus, aber einige Elemente sind inaktiv)Loader.load und Loader.loadBytes Unterschiede

var bytes:ByteArray = ... //loaded from resources 
var loader:Loader = new Loader(); 
var context:LoaderContext = new LoaderContext(false); 
context.allowCodeImport = true; //this is neccessary 
// Method 1 - blocks some scripts in loaded SWF 
//context.applicationDomain = new ApplicationDomain(); 
// (application domain has no effect with as2 swf) 
//context.securityDomain = SecurityDomain.currentDomain; //gives error 2114: securityDomain must be null 
loader.loadBytes(bytes, context); 
// Method 2 - loads properly 
//loader.load(new URLRequest(file.url)); 

Warum also nicht einfach laden aus Datei? Meine Ressourcen sind durch Verschlüsselung geschützt und ich kann sie nicht auf die Festplatte ablegen - sie müssen trotzdem geschützt sein.

Welche Tricks gibt es möglicherweise laden von Bytes richtig?

Es gibt similar question, aber in meinem Fall verursacht as2 mehr Probleme.

Antwort

4

AS2 und AS3 verwenden unterschiedliche Laufzeiten (Bytecode ist anders), so dass Sie keinen AS2-Bytecode in der AS3-Laufzeit korrekt ausführen können. Sie sind im Grunde AS2-Code in Ihre AS3 Anwendung injizieren, so ist es ja gar nicht:/

+0

Danke für die Antwort. Ich frage mich, warum der gleiche AVM1-Code vollständig funktioniert, wenn er aus der Datei geladen wird, und teilweise kaputt ist, wenn er aus Bytes geladen wird. – alxx

+1

ich denke, es ist, weil die 'load' Methode die SWF als Asset behandelt und weiß, dass es in einer AVM1 Instanz ausgeführt wird, während die 'loadBytes' Methode den AVM1 Bytecode in Ihren AVM2 Bytecode injiziert, was Probleme verursacht. – gthmb

+0

Vielleicht stimmt das (nur Adobe-Ingenieure wissen das sicher). In jedem Fall scheint es sich um einen Fehler zu handeln. Ich habe das Problem vor langer Zeit gelöst, indem ich AS2 SWF neu gemacht habe (gleiche Funktionalität wurde anders gemacht.), Keine direkte Lösung gefunden. – alxx

2

Nach der Dokumentation für LoaderContext Sie nur die applicationDomain Eigenschaft verwenden sollen, wenn Actionscript 3.0 SWF-Dateien geladen werden. Versuchen Sie, diesen Parameter zu löschen (oder auf Null zu setzen) und sehen Sie, was passiert.

+2

Das ist korrekt, obwohl ich alle Kombinationen von Parametern (Null-Domäne auch) ausprobiert habe. Es scheint, es gibt keine Lösung - AVM1 & AVM2 Interaktion ist abgehört. – alxx

+0

nicht auf dieser Harfe, aber es ist weil Sie AVM1 Bytecode in eine AVM2 SWF injizieren, die gerade nicht funktioniert: / – gthmb

Verwandte Themen