Ich versuche, zlib'ed XML wie das folgende zu dekomprimieren: Ссылка
Das Hochladen auf Online-Dekomprimierungsdienste funktioniert wie: Ссылка
In PHP verwende ich diesen Code und funktioniert gut, ich bekomme die XML-Zeichenfolge:
%Vor%Allerdings möchte ich das in JavaScript machen.
Das einzige Problem, das ich habe, ist der zlib dekomprimieren Teil.
Ab dem neuesten Update funktionieren die Dekomprimierungsbibliotheken, das Entpacken jedoch nicht. Bitte gehen Sie zum Update 16. September unten.
Ich habe bereits mehrere JavaScript-Bibliotheken ausprobiert und kann immer noch nicht funktionieren:
Pako : Ссылка
unpack()
code: Ссылка
Fehler: Uncaught incorrect header check
Es ist dasselbe, sogar die Antwort woanders zu platzieren:
new Uint8Array(response);
pako.inflate(response);
Imayas zlib : Ссылка
%Vor% Fehler: Uncaught Error: unsupported compression method
inflate.js:60
Immer noch mit Imayas zlib, kombiniert mit dieser Stack Overflow Frage: Dekomprimieren Sie gzip und zlib string in JavaScript
%Vor% Fehler: Uncaught Error: invalid fcheck flag:29
inflate.js:65
Ausgabe: leer
Augusts js-inflates : Ссылка
%Vor% Ausgabe: leer
zlib-browserify : Ссылка
Fehler: ReferenceError: exports is not defined
Dies ist nur ein Wrapper für Imayas zlib. Ich denke das ist requireJS
? Ich bin mir nicht einmal sicher, wie ich es benutzen soll. Kann es überhaupt verwendet werden, ohne etwas zu installieren und nur jQuery / JS? Die erwähnte App ist eine herunterladbare Chrome-Erweiterung mit nur HTML-Import von JS-Dateien.
Das Problem scheint mit der Funktion JavaScript unpack( )
zu sein. Wenn ich das von PHP generierte ByteArray verwende: Ссылка , funktionieren die Dekomprimierungsfunktionen von JavaScript.
PHP Entpacken, das funktioniert:
%Vor% Für den JavaScript unpack( )
Code, den ich benutze, der nicht funktioniert, siehe oben im Beitrag unter Pako .
Die neue Frage lautet also, warum JavaScript andere ByteArray-Werte erzeugt als die von PHP generierten.
unpack( )
? Mit mehr Forschung und einigen Antworten gibt es hier Leads
unpack( )
funktioniert, allerdings außerhalb des Kontexts der Chrome-Erweiterungen Damit habe ich alle möglichen Leads zusammengeführt, die mich zu einer Theorie geführt haben, dass der Grund dafür ist, dass Chrome keine "rohen" Daten durch seine request.getContent
-Funktion bekommen kann. Siehe für die Chrome-Dokumentation zu dieser Funktion.
Ab sofort habe ich das Problem in Chrome hier behandelt.
Obwohl das Problem nicht vollständig gelöst wurde, war die Antwort, die ich für am nützlichsten hielt, @Sebastian S., der vorschlug, dass "der Weg", den ich gemacht habe oder die Daten erhalten habe, schuld sei und eine schlechte Konvertierung sei die Ursache, die so nah wie das Problem war.
Meiner Meinung nach ist die Frage, die Sie wirklich stellen sollten: Wie rufen Sie die komprimierten Daten ab? Sobald es eine UTF-16-Zeichenfolge wird, beginnt das Problem. Ich bin mir nicht einmal sicher, ob die Konvertierung von rohen Bytedaten in JavaScript-Strings verlustfrei ist.
Da du etwas über PHP geschrieben hast, gehe ich davon aus, dass du mit irgendeiner Art von Backend kommunizierst. Wenn dies der Fall ist, gibt es Möglichkeiten, binäre Daten mit nativen Mitteln zu verarbeiten. Vielleicht kann Ihnen das helfen: Ссылка
Jquery liest in utf8
Format, Sie müssen die Raw-Datei lesen, diese Funktion wird funktionieren.
Weitere Informationen finden Sie in dieser Antwort .
Ich habe verstanden, dass Sie die zlib-Dekomprimierung in einer Chrome-Erweiterung verwenden möchten, während Sie Antwortkörper aus dem Netzwerkprotokoll lesen.
Sie müssen zuerst das base64 abrufen, das dekomprimiert wird. Sie können dies erreichen, während Sie die Methode getContent
verwenden.
Verwenden von XMLHttpRequest:
%Vor%Wenn Sie XMLHttpRequest mit der Chrome-Erweiterung verwenden möchten
%Vor%Fühlen Sie sich frei zu fragen, wenn Sie irgendwelche Fragen haben;)
Tags und Links javascript jquery google-chrome-extension zlib bytearray