JavaScript // zwei Scripte, kein Fehler aber nur eins läuft

-]Dr.OeTz![-

Lt. Junior Grade
Registriert
Nov. 2009
Beiträge
509
Hallo ich habe folgende Scripte:

Ziel soll es sein, eine Nachricht an ein von extern geladenes iFrame zu schicken um mit diesem kommunizieren zu können. Dies sollte nach möglichkeit nicht auf Klick (1. Fkt) sondern in einem gewissen Intervall geschehen, oder noch besser onChange von einem bestimmten Element


1. Script (funktioniert)
Ich klicke auf eine Schaltfläche, daraufhin wird die Nachricht zum iFrame geschickt
Code:
window.onload = function(){
	var win = document.getElementById("iFrameName").contentWindow;
	document.getElementById("form").onsubmit = function(e){
		win.postMessage(
			document.getElementById("msg").value,
			"http://www.url.de/"
		);
		e.preventDefault();
	};
};

2. Script: (ohne funktion)
Ich will dass die Nachricht automatisch in einem bestimmten Intervall an das iFrame übermittelt wurd. Die funktion wird angestoßen (console.log läuft) aber es kommt keine message beim iFrame an
Code:
 var win = document.getElementById("iFrameName").contentWindow;

 function sendTag() {
        win.postMessage(
	        document.getElementById("msg").value,
	        "http://www.url.de/"
	);
        console.log('test');
 }
 window.setInterval("sendTag()",400);



Könnt ihr euch vorstellen woran das liegen soll? ich kanns mir beim besten willen nicht vorstellen
 
Zuletzt bearbeitet:
window.setInterval wird einmalig aufgerufen. Das muss ebenso in die Funktion selbst.
 
sorry, verstehe gerade nur bahnhof, denn mein console.log funzt ja einwandfrei - oder wo ist jetzt mein denkfehler?
 
Code:
window.setInterval("sendTag()",400);
funktioniert nur ein Mal und zwar 400 ms nachdem der Code erreicht wurde. Dass dort der iFrame evtl. noch nicht fertig geladen hat und somit ihm nichts entgegen kommt, versteht sich von selbst. setInterval ruft die Funktion aber nur ein Mal nach Aufruf mit Verzögerung auf und nicht dauerhaft. Deswegen musst du das in die Funktion packen.
 
ne, da lag der Fehler net, setIntervall setzt ja eben einen Intervall, der die Funktion immer wieder ausführt, das sehe ich ja auch daran, dass er mir die logs schoen in der Console anzeigt (eben alle 400ms) aber fand keine Übermittlung an das iFrame statt.

gelöst habe ich das ganze nun wie folgt:

Code:
function sendTag() {
       var win = document.getElementById("iFrameName").contentWindow;
       win.postMessage(
               $('body').attr('id'),
               "http://www.domain.de/"
       );
                                        
}
window.setInterval("sendTag()",400);

trotzdem danke
 
Oha sorry, war die ganze Zeit bei setTimeout. ;) Aber gut dass du es gelöst hast.
 

Ähnliche Themen

Zurück
Oben