2012-11-29 10 views
9

Dies ist meine erste Frage zu Stack Overflow. Es ist nicht das erste Mal, dass ich eines schreiben wollte, aber normalerweise finde ich eine Lösung mit der Suchleiste, diesmal nicht. Das Problem, mit dem ich mich beschäftige, ist ein bisschen komplex, also werde ich versuchen, so gründlich wie möglich zu sein.AS3 Flash - Rendern von HTML über ExternalInterface

Grundsätzlich fügen wir chinesischen Zahlungen zu einem bereits bestehenden E-Commerce in Flash hinzu. Die gesamte Website ist in AS3, eingebettet mit SWFObject, bereits mit ExternalInterface für andere Dinge.

Diese neue chinesische Zahlungsmethode ist ein bisschen altmodisch, so dass sie eine seltsame Art der Abwicklung von Zahlungen haben. Sobald wir einen POST an ihre Server mit allen Bestelldetails gesendet haben, antworten sie mit einer HTML-Seite. Mein Problem ist das Rendern dieser Seite, wenn man bedenkt, dass ich sie in Flash erhalte.

Die Lösung, die ich gerade versuche, funktioniert teilweise, was bedeutet, dass ich die Seite sehen kann, aber die chinesischen Zeichen, die auf der Seite sein sollen, werden schlecht wiedergegeben. Anstelle der chinesischen Zeichen sehe ich seltsame Zeichen, daher vermute ich, dass es ein Codierungsproblem geben muss, wenn ich den HTML-Code von Flash an Javascript übergebe. Dies ist, wie ich es so mache:

AS3:

//extract html page from response 
var newHTML:String = e.currentTarget.data; 
//trim whitespace to avoid javascript error 
newHTML = newHTML.replace(/\n/g, ''); 
newHTML = newHTML.split("\r").join(""); 

if(ExternalInterface.available) 
    ExternalInterface.call("chinesePayment('"+newHTML+"')"); 
else 
    trace("External interface error"); 

Javascript:

function chinesePayment(param) { 
    var newWindow = window.open(); 
    //var unescaped = unescape(param); 
    newWindow.document.write(param); 
} 

Ich habe versucht, über mit unescape Messing, Flucht, URIEncoding aber ohne Erfolg, so dass ich Ich hoffe wirklich, dass du mir hier helfen kannst!

Danke, Domenico

EDIT:

Ich möchte nur erwähnen möchte, dass ich eine richtige HTML-Seite von ihren Servern bin zu empfangen. Ich habe versucht, die Seite lokal zu speichern, den HTML-Code direkt aus der Serverantwort und die Seitenansichten korrekt zu kopieren. Das bedeutet, dass beim Übergeben der Seite von AS3 an Javascript etwas falsch sein muss.

EDIT2 wichtig:

Ich habe erkannt, dass das Problem in der Popup-Codierung legt. Wenn ich den HTML-Code aus dem Popup kopiere, ihn in einen Editor einfüge und ihn speichere, kann ich den HTML-Code korrekt anzeigen. Scheint so, als würde das Popup die gbk-Codierung nicht berücksichtigen. Ich suche jetzt nach einer Lösung für dieses Problem.

+0

Wenn Sie diese Daten über say FileReference ausgeben, dann öffnen Sie es als HTML, funktioniert es im Browser ordnungsgemäß? – Vesper

+0

Ich habe das nicht versucht, auch weil dies keine endgültige Lösung sein kann. Da diese Website viele Aufträge erhält, möchte ich vermeiden, für jede Bestellung statische Seiten zu erstellen. Jedenfalls habe ich versucht, einen Breakpoint im Flash einzufügen, den HTML-Code zu kopieren und in den Editor einzufügen. Sobald ich diese Datei gespeichert habe, wurde sie korrekt gerendert, daher ist der HTML-Code bis dahin gut. Ich werde diese Lösung versuchen, nur um zu sehen, ob es funktioniert, und dann lassen Sie es wissen, wie es geht. – aberonni

+0

Nein, ich möchte testen, ob Sie eine korrekte HTML-Seite erhalten und ob alle Metadaten richtig eingestellt sind. Wenn es im Browser richtig formatiert wird, wenn es über eine Datei übertragen wird, dann erhalten Sie einen korrekten HTML-Code und Sie müssen sich in JS mit HTML-Strings weiter einarbeiten - ich weiß nicht, ob etwas im Prozess fehlschlagen kann. Wenn nicht, dann erhalten Sie entweder einen falschen/unvollständigen HTML-Code oder Sie haben keine Schriftarten auf Ihrem System oder es gibt eine andere nicht programmierende Ursache für das von Ihnen beobachtete Verhalten. – Vesper

Antwort

2

Ich habe endlich eine Lösung gefunden !!!!

Grundsätzlich musste ich die chinesischen Schriftzeichen im Flash rendern, so dass sie, wenn ich sie an Javascript weitergab, bereits kodiert waren. Also zunächst einmal hatte ich die Art von URLLoaderDataFormat zu BINARY ändern, so dass ich eine byteArray erhalten:

my_loader.dataFormat = URLLoaderDataFormat.BINARY; 

Sobald ich die Antwort erhielt ich den Code auf diese Weise geändert:

 var bytes:ByteArray = e.currentTarget.data; 
     var newHTML:String = bytes.readMultiByte(bytes.length,"gb2312"); 
     //trim whitespace to avoid javascript error 
     newHTML = newHTML.replace(/\n/g, ''); 
     newHTML = newHTML.split("\r").join(""); 

     if(ExternalInterface.available) 
      ExternalInterface.call("chinesePayment('"+newHTML+"')"); 
     else 
      trace("External interface error"); 

Wie Sie können siehe, dank einer spezifischen byteArray-Funktion kann ich die Antwort mit dem bevorzugten Zeichensatz lesen, und jetzt funktioniert es!

Das Javascript blieb gleich, ohne Unescape oder Ähnliches.Auf diese Weise erhielt die JavaScript-Funktion eine Zeichenfolge mit den chinesischen Zeichen, nicht mit den äquivalenten UTF-Zeichen.

Dank an alle, Sie haben mir geholfen, die Lösung zu bekommen!