Браузер отправляет http-запрос ДО выполнения обработчика выгрузки

Я только что обнаружил следующее (установив несколько точек останова как для клиентского, так и для серверного кода):

Если у вас есть обработчик window.onunload, он будет выполняться ПОСЛЕ того, как браузер отправит http-запрос на новую страницу.

  1. Вы переходите на следующую страницу
  2. Браузер отправляет http-запрос на новую страницу
  3. Браузер выполняет обработчик выгрузки и просто приостанавливает процесс рендеринга, пока не завершит его выполнение.
  4. Отображается новая страница.

Я только что проверил это как с Chrome, так и с Firefox.

Как так? Как вы думаете, в чем причины такого странного поведения?

PS. Вот как я это обнаружил: у меня был обработчик выгрузки, который сохранял некоторые данные через ajax. Затем я обнаружил, что новая страница, на которую я переходил, по-прежнему показывает старые данные из БД. Это заставило меня задуматься...


person Serge Shultz    schedule 10.07.2015    source источник


Ответы (1)


В спецификации HTML есть раздел Навигация по документам, в котором описывается процедура перехода на новую страницу в браузере (например, по ссылке). Шаг, который говорит

Выгрузите объект Document текущей записи, установив для параметра recycle значение false.

не выполняется до тех пор, пока не будет получен новый документ.

По-видимому, это связано с тем, что переход по ссылке не всегда может привести к выгрузке текущего документа. Например, если ответ содержит Content-disposition: attachment, цель ссылки будет загружена, но текущая страница не будет выгружена.

person Barmar    schedule 10.07.2015