| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: для новичков > Остановить все потоки setTimeout |
| Автор: ProgramerForever 8.1.2012, 19:58 | ||||
| Добрый день, уважаемые участники форума. Задача такая: Есть стандартный вызов функции через setTimeout:
Необходимо остановить все потоки, вызванные этой функцией. Вообще для этого есть функция clearTimeout(id), где id - идентификатор потока, который получается так:
Но доступа к странице у меня, естественно, нет, поэтому и id мне недоступен напрямую. Вопрос: Как остановить потоки, или как добраться до id потоков? |
| Автор: Amphiluke 8.1.2012, 21:35 |
| Если идентификатор таймера не сохранялся в глобальную переменную, то получить его из кода глобального уровня не получится никак… кроме тупого перебора. То есть, ИМХО, остается только воспользоваться тем фактом, что метод setTimeout всегда возвращает значение типа Number, которое в «обычных» условиях вряд ли будет больше, скажем, пары тысяч. |
| Автор: ProgramerForever 9.1.2012, 11:30 |
| Обнадёживает, ага. Всё равно спасибо, попробую брутфорсом. |
| Автор: Amphiluke 9.1.2012, 11:36 | ||
Возможно, более подходящим способом будет (временно) переписать callback функцию, которая вызывается таймером?
|
| Автор: ksnk 9.1.2012, 12:49 | ||
| ProgramerForever, А о чем вообще вопрос? Некто, в недоступном участке страницы с маниакальным упорством понапихал вызовов setTimeout(time,1000); К рассматриваемому моменту, к примеру, setTmeout вызвался 10 раз и прямо сейчас вызывается time первый раз. Автор функции time не желает, чтобы функция вызывалась оставшиеся 9 раз из этого цикла? Почему бы не завести глобальную переменную, в которой проставить время последнего вызова и проверять это время при вызове функции?
Правильно, конечно, будет открутить руки маньяку и написать свою собственную функцию установки таймаута, которая сохраняет в нужном месте идентификатор от setTimeout. |
| Автор: ProgramerForever 9.1.2012, 13:37 | ||
Amphiluke, сработал вот такой код:
Всем спасибо. |
| Автор: Amphiluke 9.1.2012, 14:02 | ||
| ProgramerForever, советую вам пообновлять страничку раз семь-десять. Во многих браузерах id-шники таймеров после обновления страницы не начинают нумерацию с начала, как при первом открытии страницы, а продолжают нумерацию, начатую еще при первом открытии страницы. Так что id-шники запросто могут «ускакать» далеко за сотню. Вот пример для тестирования:
|