NeoVanGoth: Mozilla node.data Größenbeschränkung?

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

  1. 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

    1. 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. ;)