Подтвердить что ты не робот

Когда javascript останавливается на странице после щелчка ссылки?

У меня есть страница, которая запускает различные javascript-коды, включая вызов setTimeout(). Если пользователь нажимает ссылку для перехода на другую страницу, то в какой момент javascript на этой странице перестает работать, и поэтому мой код, вызываемый setTimeout, больше не будет вызываться? например.

  • как только будет нажата ссылка (я знаю, что это неправильно)
  • когда браузер начинает получать новую страницу
  • какая-то другая точка?

И отличается ли это от разных основных браузеров?

Фон

Я хочу знать это в основном ради интереса, а не для решения какой-либо конкретной проблемы. Проблема, побудившая меня задуматься над этим, - это что-то сделать, когда пользователь нажимает на определенную ссылку на странице. Я хочу выполнить вызов ajax и обработать результат, но я не слишком обеспокоен тем, что он заканчивается до того, как страница будет выгружена. Поэтому я запустил setTimeout() на ссылку, а затем, если мне повезет, она закончит, но если я не буду, это не произойдет. Я задавался вопросом, в каких обстоятельствах это будет работать. Хотя могут быть другие решения этой проблемы, я не хочу решений проблемы, я хочу только знать ответ на вопрос.

4b9b3361

Ответ 1

Здесь последовательность того, что происходит:

Шаг 1: Вы нажимаете на ссылку. Здесь браузер отправляет запрос на сервер и ждет ответа. Объект текущего документа страницы все еще существует.

Шаг 2: Браузер получает ответ. Объекты текущего документа страницы все еще существуют.

Шаг 3. Браузер анализирует, создает и отображает ответ на новый объект документа.

Шаг 3: если текущая страница JS остановится, UNLESS, вы, например, настроили ответ на iframe. Если вы это сделаете, тогда новый объект документа будет отображаться внутри iframe, а объект документа текущей страницы останется неповрежденным, а JS останется функциональным.

Надеюсь, что ответит на ваш вопрос!

Ответ 2

Одним из возможных решений может быть остановка события клика, отключение асинхронного вызова и возобновление события по умолчанию, когда результат от вызова ajax был обработан. Или, если возможно, вы можете обрабатывать обработку на сервере, в этом случае вам даже не нужно будет останавливать событие по умолчанию - просто запустите свой асинхронный вызов.

В ответ на ваш вопрос я согласен с Джеком, что script перестанет работать после события onunload.

Надеюсь, что это будет.