Na okay ... also ich hab den Bug bei FF reportet und rausgefunden, dass des schon seit 2003 bekannt ist.
Und jetzt kommt der Hammer *lach*...
Also die Gecko Engine ist die einzige Engine die nodeValues von XML files bei 4096 aufteilt. Und dies wohl aus Performance-Gründen.
MozDev Bug Link: https://bugzilla.mozilla.org/show_bug.cgi?id=194231
Der Witz ist echt, dass die Developer selber unter sich uneins sind ob sie das machen 'dürfen' oder nicht. Aber sche**** ist es schon, dass sie es machen aber niemandem sagen ;) - die Lösung war dann versteckt in irgendeiner der Posts ... "However, Mozilla splits consecutive block of text in a HTML Tag into multiple textNode(s) of 4KB. "
Sprich: ich hab ein nodeValue obj[0] mit 6096 bytes
IE: obj[0] mit 6096 bytes
opera: obj[0] mit 6096 bytes
firefox: obj[0] mit 4096 bytes und obj[1] mit 2000 bytes
Jetzt ist nur die Frage wie man es dynamisch ausliest.
Hier der Link: http://test.wii-connection.de/test_stuff/xml-test/xml.html
Und hier der Quellcode nochmal (etwas modifiziert):
HTML:
<html>
<head>
<title>AJAX</title>
<script type="text/javascript">
var http = null;
if (window.XMLHttpRequest) {
http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
http = new ActiveXObject("Microsoft.XMLHTTP");
}
window.onload = function() {
if (http != null) {
http.open("GET", "test.xml", true);
http.onreadystatechange = ausgeben;
http.send(null);
}
}
function ausgeben() {
if (http.readyState == 4) {
alert('wrong length ob obj[0] in bytes: '+http.responseXML.getElementsByTagName('links')[0].firstChild.nodeValue.length);
document.body.innerHTML+= http.responseXML.getElementsByTagName('links')[0].firstChild.nodeValue;
alert('truncated obj[0] becomes obj[1] in bytes: '+http.responseXML.getElementsByTagName('links')[0].lastChild.nodeValue.length);
document.body.innerHTML+= http.responseXML.getElementsByTagName('links')[0].firstChild.nodeValue;
}
}
</script>
</head>
<body>
<ul id="Liste"></ul>
</body>
</html>
XML:
<?xml version="1.0" encoding="UTF-8"?>
<links>{mehr als 4096 chars zum testen eingeben!}</links>
{mehr als 4096 chars zum testen eingeben!} mit mehr als 4096 Zeichen ersetzen.