Mozilla node.data Größenbeschränkung?
NeoVanGoth
- xml
Hi,
mir ist aufgefallen, das bei Firefox bis 1.0.7 (also vermutlich auch Mozilla) der per .data oder .nodeValue angesprochene Content eines Text-Nodes aus XML-Quellen (z.B. document. oder per XMLHttpRequest erhaltenes XML) auf die ersten 4096 Bytes reduziert wird. Das gibt sowohl .length als auch eine Debug-Meldung per alert() aus.
Kennt das jemand? Workaround bekannt oder so?
Danke und Gruß,
Neo / Tom
Hallo,
mir ist aufgefallen, das bei Firefox bis 1.0.7 (also vermutlich auch Mozilla) der per .data oder .nodeValue angesprochene Content eines Text-Nodes aus XML-Quellen (z.B. document. oder per XMLHttpRequest erhaltenes XML) auf die ersten 4096 Bytes reduziert wird. Das gibt sowohl .length als auch eine Debug-Meldung per alert() aus.
Kennt das jemand? Workaround bekannt oder so?
Bei XMLHttpRequest:
Der "readyState 3" bedeutet in Mozille/Firefox "interactive" und meint interaktives herunterladen, wo die Antwort einen Teil der Daten enthält.
Firefox/Mozilla scheint diesen Status (readyState 3) für alle 4090 byte (oder für das Ende der Datei) erneut aufzurufen.
Siehe auch http://tigerbliss.com/mark-7124.html
Firefox/Mozilla schein aber auch in anderem Zusammenhang ein Problem mit 4096 zu haben. (https://bugzilla.mozilla.org/show_bug.cgi?id=235344)
Grüße
Thomas
Ha! Lösung gefunden! Google hilft manchmal doch nicht weiter, in Blick in den Bugzilla hat es gezeigt. ;)
Es hat in der Tat nichts mit den 4096Byte-Blöcken beim Download per XMLHttpRequest zu tun (da es sich hier ja gewissermaßen um den Plaintext des XML-Dokuments handelt), sondern mit einer internen Beschränkung der Mozilla-Engine, die auf _alle_ DOM-Objekte zutrifft.
Inhalte von Text-Nodes die größer als 4096Byte sind, werden auf 4096 große Stücke aufgeteilt, die dann als einzelne Textnodes im selben Parent sind. Laut DOM-Spezifikation ist das Quatsch, aber immerhin ermöglicht es einen einfachen Workaround.
Bug-Beschreibung: https://bugzilla.mozilla.org/show_bug.cgi?id=194231
Beispiel:
<div id="test">vieeeeeeeeeeeeel Text...</div>
text = document.getElementById ("test").firstChild.nodeValue;
"text" wird max. 4096 Bytes groß.
Aber danke fürs Nachdenken! :D Komischerweise findet sich die Lösung immer erst, wenn man schon nachgefragt hat. Aber vielleicht hilfts ja mal jemandem. ;)