Frame per JS reloaden
-
Hallo,
auf einer Seite habe ich ein iframe, dessen Inhalt nur dann refresht werden soll, wenn sich dieser auch tatsächlich am Server geändert hat (also fällt meta http-equiv="refresh"... schon mal aus). Ich habe es nun per Javascript so versucht:
// some init code for xmlHttp var xmlHttp = null; // Mozilla, Opera, Safari, Internet Explorer 7 if (typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); } if (!xmlHttp) { // Internet Explorer 6 try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { xmlHttp = null; } } } var oldChatText = null; function chat_reload(){ if (xmlHttp) { // also put some random stuff to the server, to avoid aggressive caching, like IE does var url = "?random=" + Math.random(); xmlHttp.open('GET', url, true); xmlHttp.send(null); //alert(url); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4) { //alert(xmlHttp.responseText); if(xmlHttp.responseText != oldChatText){ oldChatText = xmlHttp.responseText; location.reload(); } } }; } window.setTimeout( "chat_reload()", 15000); }
Im iframe wird die Funktion per <body onload="chat_reload()"... aufgerufen. Der Inhalt des iframes aktualisiert sich aber nicht, auch wenn sich der Inhalt geändert hat. Der Datentausch generell mit dem xmlHttp-Objekt scheint aber schon zu funktionieren (getestet).
Woran könnte das liegen? Habe mit JS leider nicht soviel Erfahrung.
-
Aso, eins noch: Der JS-Code befindet sich in einer extra Script-Datei und wird also nicht jedes mal beim reload des iframes neu geladen (z.B. var oldChatText = null; )
-
Denke, ich hab das Prob jetzt nach Stunden rumprobieren gelöst. Falls es jemanden interessiert:
Das PHP-Skript hab ich so umgebaut, dass es möglich ist, sich nicht nur das komplette iframe zu holen, sondern mit Param ?table=true nur den eigentlich Inhalt, ohne Header usw. (hat bei mir immer Probs gemacht, weil im body ein onload="chat_reload" stand). Anstatt location.reload() hab ein div mit id msgTable angelegt welches mit dem neuen aktualisierten Inhalt gefüllt wird.var oldChatText; function chat_reload(){ if (xmlHttp) { // also put some random stuff to the server, to avoid aggressive caching, like IE does var url = "?table=true&random=" + Math.random(); xmlHttp.open('GET', url, true); xmlHttp.send(null); xmlHttp.onreadystatechange = function () { if (xmlHttp.readyState == 4) { //alert(xmlHttp.responseText); if(xmlHttp.responseText != oldChatText){ oldChatText = xmlHttp.responseText; document.getElementById("msgTable").innerHTML = xmlHttp.responseText; } } }; } window.setTimeout( "chat_reload()", 6000); }