не работает setTimeout в userjs
Здравствуйте! Пишу скрипт для проверки личных сообщений на форуме. почему-то отказывается работать setTimeout. буду благодарен за помощь.
function idf_timer(set_tmr) { var tmr_counter=set_tmr; if (tmr_counter>=30) {tmr_counter=0; CheckForMessages();} else tmr_counter++; setTimeout("idf_timer("+tmr_counter+")",1000); } |
если не ошибаюсь, надо так:
setTimeout(function(){idf_timer(tmr_counter)},1000 ); ... а вообще я бы все это заменил одной строкой setInterval("CheckForMessages()",30000); |
скорее так:
setTimeout((function(tmr_counter){return function(){idf_timer(tmr_counter)}})(tmr_counter), 1000); но с интервалами решение красивее. |
Если передать аргументом setTimeout (и setInterval) строку, то код внутри нее будет выполнен в глобальном контексте. А все юзерскрипты, если мне не изменяет память, по-умолчанию выполняются в своем собственном локальном контексте. Отсюда - функции idf_timer и CheckForMessages не существуют в глобальном контексте.
|
спасибо. а причину указать не могли бы? потому что в опере этот код прекрасно работает...
|
Видимо, в опере юзерскрипты все-таки выполняются в глобальном контексте. В любом случае засорение глобального пространства имен - плохой тон, и его лучше избегать. Как и строковых аргументов для setTimeout / setInterval, потому что eval - зло (А для преобразования строки в код будет использован именно он).
|
Цитата:
|
Часовой пояс GMT +3, время: 09:41. |