2013-04-02 17 views
6

Meine AIR-App lädt eine SWF-Datei, die ein Textfeld für die Eingabe enthält. Ich kann in das Textfeld eingeben, aber kopieren und einfügen ist kaputt. Wenn ich versuche, etwas fügen Sie die Tastenkombination verwenden, wird das Textfeld wie folgt aus:Kopieren von Textfeldern in geladenen SWFs in AIR nicht möglich

enter image description here

(dies ist kein „T“).

Und nach einer Reihe von Kopieren/Einfügen sieht es wie folgt aus:

enter image description here

Wenn ich einen Rechtsklick auf dem Textfeld tun, nichts passiert, erscheint kein Kontextmenü mit Kopieren/Einfügen-Optionen .

Die SWF, die geladen wird, befindet sich in AS2 (es ist praktisch unmöglich, sie auf AS3 zu portieren, da der Code sehr umfangreich und ausgefeilt ist). Ich kann das SWF nicht ersetzen, es hat einen extrem hohen Wert für mein Projekt. Abgesehen von diesem Problem funktioniert der SWF gut. Vielleicht könnte ich einige Konfigurationskonstanten in den AS3-Einstellungen des Loaders ändern?

Zu Testzwecken habe ich zwei .flas erstellt, eine ist in AS2 und enthält ein Textfeld und die andere ist in AS3 und lädt das Textfeld. Sie können die .flas in einem Archiv from here herunterladen.

+0

Gibt es keine AS2-AS3-Kommunikation, die sich auf Sie auswirkt? Haben Sie versucht, mit einer SWF-Beispieldatei (AS3) die andere SWF-Datei zu laden und dieses Problem beim Kopieren und Einfügen zu testen? –

+0

@ Lukasz'Severiaan'Grela Inter-SWF-Kommunikation hat damit nichts zu tun. Das kannst du aus den beiden .flas, die ich angehängt habe, herausfinden. – Pleo

Antwort

6

Es ist schmutzig hack, aber es funktioniert. :) Konvertieren Sie Ihre SWF von AVM1 zu AVM2 "on fly". Verwenden Sie ForcibleLoader https://code.google.com/p/as3-classes/source/browse/trunk/org/lzyy/util/ForcibleLoader.as

In loader.fla:

var loader:Loader = Loader(addChild(new Loader())); 
var fLoader:ForcibleLoader = new ForcibleLoader(loader); 
fLoader.load(new URLRequest('tf.swf')); 

In ForcibleLoader.as hinzufügen import flash.system.LoaderContext;

und

var lc:LoaderContext = new LoaderContext(); 
lc.allowCodeImport = true; 
loader.loadBytes(inputBytes, lc); 

statt

loader.loadBytes(inputBytes);

in line ~ 75

+0

Das ist unglaublich gut! Sie haben meinen Tag gemacht, Sir! Ich danke dir sehr! Ich werde jetzt mehr über das AVM1/AVM2-Thema erfahren. – Pleo

+0

Eine Art von Flash Black Magic :) Ich bin froh, Ihnen zu helfen! – Smolniy

+0

Ah schnappen! Ich habe es gerade mit der tatsächlichen SWF überprüft und obwohl es alle Grafiken lädt, führt es keinen Code von der geladenen SWF aus! :(Was habe ich verpasst? – Pleo