Greasemonkey setTimeout и setInterval не запускаются - PullRequest
1 голос
/ 12 февраля 2012

Я использую следующий код. Единственное предупреждение, которое я получаю, это alert(t).Я пробовал unsafeWindow.setTimeout, window.setTimeout и другие варианты, включая setInterval - ничего не работает.

$('#on').change(function () { t = setTimeout(function () { starttimer() },1000);timer_on = true;alert(t);  });
    function starttimer() { 
    alert('triggered');
        if (timer_on) {
            alert('timerstarted');
            t = setTimeout(function () { startimer() },1000);
            }
    }

Правка: ошибок тоже нетСценарий продолжает выполняться, и t имеет нормальное значение, просто функция никогда не запускается.

1 Ответ

2 голосов
/ 12 февраля 2012

Не пишите такой код! Научитесь любить jsBeautifier и JSLint .

Какую версию FF и Greasemonkey вы используете? Некоторые комбо имели проблемы с оповещениями внутри таймеров и / или слушателей событий.

Во всяком случае, $('#time').val (), вероятно, не присутствует или не то, что вы думаете. $('#time') относится к <input>?

Попробуйте этот код:

// t and timer_on are global variables.

$('#on').change ( function () {
    var timeVal = $('#time').val ()  ||  1; //-- Account for empty and NaN
    timeVal     = parseInt (timeVal, 10) * 1000;

    alert ('Time val = ' + timeVal);
    t           = setTimeout (starttimer, timeVal);
    timer_on    = true;
    alert (t);
} );

function starttimer () {
    alert ('triggered');
    if (timer_on) {
        alert ('timerstarted');
        var timeVal = $('#time').val ()  ||  1; 
        timeVal     = parseInt (timeVal, 10) * 1000;

        alert ('Time val = ' + timeVal);
        t           = setTimeout (starttimer, timeVal);
    }
}
...