![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| ProgramerForever |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 15.11.2006 Где: Новосибирск Репутация: 1 Всего: 5 |
Добрый день, уважаемые участники форума.
Задача такая: Есть стандартный вызов функции через setTimeout:
Необходимо остановить все потоки, вызванные этой функцией. Вообще для этого есть функция clearTimeout(id), где id - идентификатор потока, который получается так:
Но доступа к странице у меня, естественно, нет, поэтому и id мне недоступен напрямую. Вопрос: Как остановить потоки, или как добраться до id потоков? |
||||
|
|||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Если идентификатор таймера не сохранялся в глобальную переменную, то получить его из кода глобального уровня не получится никак… кроме тупого перебора.
То есть, ИМХО, остается только воспользоваться тем фактом, что метод setTimeout всегда возвращает значение типа Number, которое в «обычных» условиях вряд ли будет больше, скажем, пары тысяч. Это сообщение отредактировал(а) Amphiluke - 8.1.2012, 21:37 |
|||
|
||||
| ProgramerForever |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 15.11.2006 Где: Новосибирск Репутация: 1 Всего: 5 |
Обнадёживает, ага. Всё равно спасибо, попробую брутфорсом.
|
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
Возможно, более подходящим способом будет (временно) переписать callback функцию, которая вызывается таймером?
Это сообщение отредактировал(а) Amphiluke - 9.1.2012, 11:48 |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 48 Всего: 386 |
ProgramerForever,
А о чем вообще вопрос? Некто, в недоступном участке страницы с маниакальным упорством понапихал вызовов setTimeout(time,1000); К рассматриваемому моменту, к примеру, setTmeout вызвался 10 раз и прямо сейчас вызывается time первый раз. Автор функции time не желает, чтобы функция вызывалась оставшиеся 9 раз из этого цикла? Почему бы не завести глобальную переменную, в которой проставить время последнего вызова и проверять это время при вызове функции?
Правильно, конечно, будет открутить руки маньяку и написать свою собственную функцию установки таймаута, которая сохраняет в нужном месте идентификатор от setTimeout. Это сообщение отредактировал(а) ksnk - 9.1.2012, 12:55 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| ProgramerForever |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 15.11.2006 Где: Новосибирск Репутация: 1 Всего: 5 |
Amphiluke, сработал вот такой код:
Всем спасибо. |
|||
|
||||
| Amphiluke |
|
|||
|
☽ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1253 Регистрация: 26.8.2009 Репутация: 39 Всего: 112 |
ProgramerForever, советую вам пообновлять страничку раз семь-десять. Во многих браузерах id-шники таймеров после обновления страницы не начинают нумерацию с начала, как при первом открытии страницы, а продолжают нумерацию, начатую еще при первом открытии страницы. Так что id-шники запросто могут «ускакать» далеко за сотню.
Вот пример для тестирования:
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |