Когда я использую setTimeout () в цикле for () в скрипте greasemonkey, он вообще не работает. Тем не менее, точно такой же код работает нормально, если я запускаю его в консоли Firebug. Вот код:
// ==UserScript==
// @name setTimeout test
// @include *
// @run-at document-end
// ==/UserScript=
function test(delaytime) {
alert("test called with "+delaytime);
}
function test2() {
for( var i = 0; i < 100; i+= 10 ) {
setTimeout('test('+i+');', i);
}
}
setTimeout(test2,10);
Если я заменю цикл for () явными вызовами, подобными приведенным ниже, то он будет работать нормально.
setTimeout(function() { test( 0); }, 0);
setTimeout(function() { test(10); }, 10);
setTimeout(function() { test(20); }, 20);
setTimeout(function() { test(30); }, 30);
setTimeout(function() { test(40); }, 40);
setTimeout(function() { test(50); }, 50);
setTimeout(function() { test(60); }, 60);
setTimeout(function() { test(70); }, 70);
setTimeout(function() { test(80); }, 80);
setTimeout(function() { test(90); }, 90);
Какая разница? Есть ли какой-нибудь способ, которым я могу заставить сгенерированный цикл forTimeouts работать в greasemonkey?