Проблема заключается в текстовом параметре setTimeout
.Это работает очень хорошо с greasemonkey, но если вы используете текстовые команды вместо обратных вызовов, код никогда не выполняется, так как песочница greasemonkey очищается к моменту запуска setTimeout
.Он пытается запустить eval
с текстовым параметром, который в свою очередь wchis пытается вызвать функцию countdown
, которая к тому времени больше не существует.
В настоящее время поток программы выглядит следующим образом:
1. function countdown(){}
2. setTimeout("countdown()", 1000);
3. clearGreasemonkeySandbox();
4. ... wait 1 sec...
5. eval("countdown()"); // <- countdown doesn't exist anymore
Таким образом, вы должны использовать обратные вызовы, поэтому вместо полного предложения используется указатель на функцию.
setTimeout(function(){
countdown(--time, id);
}, 1000);