ok, ich drück es mal anders aus. Wenn ich den Tipp mit dem Timer auf mein Beispiel umsetze, sieht das etwa so aus:
Da ist immer noch keine anonyme Funktion.
function test(i,j) {
if (j == undefined) {
i = 0;
j = 0;
}
alert(i);
alert(j);
if (i < 1) {
if (j < 1) {
j++;
window.setTimeout("test "+i+" "+j ,1000);
Das geht nicht.
}
else {
j = 0;
i++;
if (i < 1) {
window.setTimeout("test("+i+","+j+")",1000);
Das müßte gehen.
}
}
}
}
test();Und siehe da, funktioniert als HTML-Datei mit Javascript einwandfrei. Leider ist bei Benutzung dieses Scriptes in Greasemonkey nach Ausgabe von 0,0 bereits Schluß. Meldung von Firebug: test ist nicht definiert. Und das ist eben das Problem, was im obigen Link erläutert ist. Ich rufe eine Funktion test(i,j) auf. Greasemonkey lässt aber gemäß dem Link nur einen Aufruf von test zu. Dies konnte ich mit Funktionen ohne Parameter (also test() im Vergleich mit test) experimentell bestätigen.
Ich kenn mich mit Greasemonkey nicht so aus, aber das Verhalten ist nicht erklärbar, die Fehlermledung müßte anders lauten und tut sie in einer normalen HTML Seite auch:
Fehler: missing ; before statement
Quelldatei: test.html
Zeile: 77, Spalte: 5
Quelltext:
test 0 1
Es hängt also jetzt daran, wie ich einen zeitgesteuerten Funktionsaufruf ohne Parameterübergabe mit Ausgabe von i und j hinbekomme oder wie ich bei Greasemonkey doch Parameter mitgeben kann.
Mit einer anonymen Funktion z.b. so:
function test(i,j) {
var callback = function(p1, p2) {
return function() {
alert(p1 + '-' + p2);
}
};
if (typeof j == 'undefined') {
i = 0;
j = 0;
}
if (i < 1) {
if (j < 1) {
j++;
window.setTimeout(callback(i, j) ,1000);
} else {
j = 0;
i++;
if (i < 1) {
window.setTimeout(callback(i, j), 1000);
}
}
}
}
test();
Die callback Funktion wird aber nur einmal aufgerufen.
Struppi.