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);
    }
    

Anmelden zum Antworten