# Chat funktioniert nur unter FF. Warum?



## Kerwindena (12. Jan 2008)

Hallo ich habe vor Kurzem einen Chat geschrieben. Als ich diesen fertiggestellt hatte musste ich feststellen, dass die Seite, die normalerweise die einzelnen Einträge ausgibt im IE nur eine schwarze Seite ist... Das Java-Protokoll im IE zeigt keine fehler an... Wenn mir jemand gerne helfen möchte...

Hier sind die links zu den relevanten dateien
Chat 
siblingsofblood.si.funpic.de/chat2.php?table=shout
Ausgabe-Seite
siblingsofblood.si.funpic.de/view.php?table=shout&all=false
XML-dokument
siblingsofblood.si.funpic.de/view.xml.php?table=shout&all=true
Java-Script
siblingsofblood.si.funpic.de/chat.js

Und hier noch einmal das Java-Script:

```
var req = null;
              var reqdata = null;
              var aktual_id = null;

//*****************************************
//*****************************************
//*******
//*****************************************
//*****************************************
function output(base){  
var id = base.getElementsByTagName("id")[0].firstChild.nodeValue;
var name = base.getElementsByTagName("name")[0].firstChild.nodeValue;
var logged = base.getElementsByTagName("logged")[0].firstChild.nodeValue;
var ip = base.getElementsByTagName("ip")[0].firstChild.nodeValue;
var date = base.getElementsByTagName("date")[0].firstChild.nodeValue;
var time = base.getElementsByTagName("time")[0].firstChild.nodeValue;
var entries = base.getElementsByTagName("entries")[0].firstChild.nodeValue;
aktual_id = id;
var TR = document.createElement("tr");
var ZEILE = document.getElementsByTagName("table")[0].appendChild(TR);
var TD = ZEILE.insertCell("0");
var B1 = document.createElement("b");
var B2 = document.createElement("b");
var BEITRAEGE = TD.appendChild(B1);
BEITRAEGE.title = "Beiträge: " + entries;
var USER = document.createTextNode(name + " ");
BEITRAEGE.appendChild(USER);
var ZEIT = TD.appendChild(B2);
ZEIT.title = date;
var DATUM = document.createTextNode("(" + time +  "): ");
ZEIT.appendChild(DATUM);
for(var i = 0; i< base.getElementsByTagName("text")[0].childNodes.length; i++)
{
var text = base.getElementsByTagName("text")[0].childNodes[i].nodeValue
var TEXT = document.createTextNode(text);
TD.appendChild(TEXT);
if(base.getElementsByTagName("text")[0].childNodes[i].tagName == "br"){
var TEXT = document.createElement("br");
TD.appendChild(TEXT);
}
if(base.getElementsByTagName("text")[0].childNodes[i].tagName == "img"){
var TEXT = document.createElement("img");
var IMG = TD.appendChild(TEXT);
IMG.src = base.getElementsByTagName("text")[0].childNodes[i].attributes[0].nodeValue;
}
window.scrollTo(0,99999);
}
return true;
}
//*****************************************
//*****************************************
//*******
//*****************************************
//*****************************************
function contend_print(){           
                switch(req.readyState) {
                    case 4:
                        if(req.status!=200) {
                            alert("Fehler:"+req.status); 
                        }else{
reqdata = req.responseXML;
for(var i = 0; i< reqdata.getElementsByTagName("data").length; i++)
{
output(reqdata.getElementsByTagName("data")[i]);
}
                        }
                    break;
            
                    default:
                        return false;
                    break;     
                }
            }   
//*****************************************
//*****************************************
//*******
//*****************************************
//*****************************************         
function contend(){         
                 //erstellen des requests
                 
                try{
                    req = new XMLHttpRequest();
                }
                catch (e){
                    try{
                        req = new ActiveXObject("Msxml2.XMLHTTP");
                    } 
                    catch (e){
                        try{
                            req = new ActiveXObject("Microsoft.XMLHTTP");
                        } 
                        catch (failed){
                            req = null;
                        }
                    }  
                }

                if (req == null) alert("Error creating request object!");     
                  var url = 'view.xml.php?table=' + document.getElementById('table').value + '&all=' + document.getElementById('all').value;
                  req.open("GET", url, true);

                //Beim abschliessen des request wird diese Funktion ausgeführt
                req.onreadystatechange = contend_print;
  
                  req.setRequestHeader("Content-Type",
                                      "application/x-www-form-urlencoded");
                req.send(null);
window.setInterval("contend_update()", 3000);
            }
//*****************************************
//*****************************************
//*******
//*****************************************
//*****************************************
function contend_update_print(){            
                switch(req.readyState) {
                    case 4:
                        if(req.status!=200) {
                            alert("Fehler:"+req.status); 
                        }else{
reqdata = req.responseXML;
for(var i = 0; i< reqdata.getElementsByTagName("data").length; i++)
{
output(reqdata.getElementsByTagName("data")[i]);
}
                        }
                    break;
            
                    default:
                        return false;
                    break;     
                }
            }
//*****************************************
//*****************************************
//*******
//*****************************************
//*****************************************
function contend_update(){         
                 //erstellen des requests
                 
                try{
                    req = new XMLHttpRequest();
                }
                catch (e){
                    try{
                        req = new ActiveXObject("Msxml2.XMLHTTP");
                    } 
                    catch (e){
                        try{
                            req = new ActiveXObject("Microsoft.XMLHTTP");
                        } 
                        catch (failed){
                            req = null;
                        }
                    }  
                }

                if (req == null) alert("Error creating request object!");     
                  var url = 'view.xml.php?table=' + document.getElementById('table').value + '&id=' + aktual_id;
                  req.open("GET", url, true);

                //Beim abschliessen des request wird diese Funktion ausgeführt
                req.onreadystatechange = contend_update_print;
  
                  req.setRequestHeader("Content-Type",
                                      "application/x-www-form-urlencoded");
                req.send(null);
            }
```

Ich bedanke mich schon einmal im Voraus.


----------



## EOB (13. Jan 2008)

nur son ganz dummer tip: java script ausgeschaltet? wie gesagt, nur ne vermutung...

grüße


----------



## Kerwindena (14. Jan 2008)

Danke für die schnelle Antwort, aber javascript ist definitiv eingeschaltet... Ich bin dem ganzen mal so ein wenig näher auf den grund gegangen und habe herausgefunden, dass sich der fehler in Folgender funktion befinden muss:

```
function output(base){  
var id = base.getElementsByTagName("id")[0].firstChild.nodeValue;
var name = base.getElementsByTagName("name")[0].firstChild.nodeValue;
var logged = base.getElementsByTagName("logged")[0].firstChild.nodeValue;
var ip = base.getElementsByTagName("ip")[0].firstChild.nodeValue;
var date = base.getElementsByTagName("date")[0].firstChild.nodeValue;
var time = base.getElementsByTagName("time")[0].firstChild.nodeValue;
var entries = base.getElementsByTagName("entries")[0].firstChild.nodeValue;
aktual_id = id;
var BR = document.createElement("br");
var TR = document.createElement("tr");
var ZEILE = document.getElementsByTagName("table")[0].appendChild(TR);
var TD = ZEILE.insertCell("0");
var B1 = document.createElement("b");
var B2 = document.createElement("b");
var BEITRAEGE = TD.appendChild(B1);
BEITRAEGE.title = "Beiträge: " + entries;
var USER = document.createTextNode(name + " ");
BEITRAEGE.appendChild(USER);
var ZEIT = TD.appendChild(B2);
ZEIT.title = date;
var DATUM = document.createTextNode("(" + time +  "):");
ZEIT.appendChild(DATUM);
TD.appendChild(BR);
for(var i = 0; i< base.getElementsByTagName("text")[0].childNodes.length; i++)
{
var text = base.getElementsByTagName("text")[0].childNodes[i].nodeValue
var TEXT = document.createTextNode(text);
TD.appendChild(TEXT);
if(base.getElementsByTagName("text")[0].childNodes[i].tagName == "br"){
var TEXT = document.createElement("br");
TD.appendChild(TEXT);
}
if(base.getElementsByTagName("text")[0].childNodes[i].tagName == "img"){
var img = document.createElement("img");
var IMG = TD.appendChild(img);
IMG.src = base.getElementsByTagName("text")[0].childNodes[i].attributes[0].nodeValue;
}
window.scrollTo(0,99999);
}
return true;
}
```

Das XML dokument wird auch im IE ohne Probleme ausgewertet, da z.B. die variabeln "text" oder "name" mit den richtigen Inhalten versehen werden. Der teil danach wird aber anscheinend vom IE falsch interpretiert. Ich hab mich auch schon ein wenig schlau gemacht und mir diverse Seiten dazu durchgelesen, dass das dom im IE anders funktionieren würde/interpretiert wird. Ich habe auch schon die methode über document.all ausprobiert... leider ohne erfolg... es wäre net, wenn mir jemand einen Tip geben könnte, wesshalb der IE das nicht hinbekommt... ich bin wirklich an verzweifeln... danke an alle, die es versuchen werden


----------



## lolkind (14. Jan 2008)

```
(var i = 0; i< base.getElementsByTagName("text")[0].childNodes.length; i++)
{
var text = base.getElementsByTagName("text")[0].childNodes[i].nodeValue
var TEXT = document.createTextNode(text);
```
Nur so als Vermutung, kann es sein das da ein Similikolon fehlt?
Und das dieser Fehler Firefox nichts ausmacht/korrigiert?

Gruß


----------



## Kerwindena (14. Jan 2008)

Hallo

@lolkind: natürlich hattest du recht, das Semikolon fehlte... Firefox hat das nicht im geringsten etwas ausgemacht, allerdings war dies nicht der Auslöser für diesen Fehler im IE... trotzdem danke für die schnelle Antwort...

@all: Ich habe versucht das Problem weiter einzuschränken und habe einige sachen ausprobiert... ich glaube, dass der IE entweder den Befehl "createElement" oder "appendChild" nicht versteht. Zur zeit probiere ich, ob ich das Problem mit "insertAdjacentHTML" in den Griff bekomme... mal sehen...


----------



## lolkind (15. Jan 2008)

Ich glaub createElement ist der Übeltäter.
Das dürfte dir weiterhelfen :arrow: forum.de.selfhtml.org/archiv/2005


----------



## Kerwindena (15. Jan 2008)

schon einmal danke... bin bis jetzt leider noch nicht dazu gekommen mir den Artikel durchzulesen... aber es ist gut möglich, dass du recht hast... wenn es was neues zu dem Thema gibt, meld ich mich wieder
mfg Kerwindena


----------



## Kerwindena (15. Jan 2008)

Hey danke... ich hab das Problem gelöst...
Naja es hatte eher weniger damit zu tun, was ich gedacht hatte... ich Blödmann hatte nur einfach den tbody vergessen und wie ja allgemein bekannt ist, ist der IE da ein wenig überempfindlich, wenn mann ihm einfach seinen lieblingsbefehl vorenthält^^ Tut mir leid euch mit so einem Unsinn beschäftigt zu haben...^^ ich denke mal, dass es das jetzt war...
Noch einmal herzlichen dank an alle, die sich mit diesem Problem beschäftigt haben...

mfg Kerwindena


----------

