Причины выгрузки страницы могут быть разные:
1 Пользователь закрывает текущее окно.
2 Пользователь переходит в другое место.
3 Нажимает кнопку «Назад», «Вперед», «Обновить» или «Домой».
4 Пользователь отправляет форму, а затем браузер начинает выгружать текущую страницу и загружать страницу с результатами отправки формы. (Предполагая, что текущее окно является целью формы).
5 и так далее...
Можно ли как-то узнать в обработчике onunload, что причина выгрузки п.4, т.е. переход на страницу с результатами отправки формы?
Я мог бы установить какой-нибудь флаг при отправке формы, но это не решает проблему. Поскольку ответ (при отправке формы) от веб-сервера занимает некоторое время, браузер не сразу выгружает текущую страницу и ждет ответа от сервера. И во время этого ожидания пользователь может закрыть окно или перейти куда угодно. И мне нужно знать, действительно ли он перемещался на страницу результатов или что-то еще...?
Как я могу получить причину выгрузки страницы в событии onunload javascript в IE?
Ответы (2)
Вы можете захватить некоторые из этих событий.
Например, для ссылок вы можете добавить обработчик событий для ссылок, который сохраняет их атрибут href
, выполняет то, что вам нужно, а затем устанавливает window.location
на href
, который вы сохранили в переменной.
Точная причина выгрузки страницы не может быть известна обработчику выгрузки. Событие OnUnload не является стандартным и было впервые реализовано в IE.
Разные браузеры могут обрабатывать это по-разному и запускать событие в разных случаях.
Поэтому, если вы пытаетесь узнать причину выгрузки в обработчике выгрузки, я думаю, вам может не повезти. Однако, как указал Алекс в своем ответе, вы, вероятно, могли бы узнать о том, что пользователь уходит с вашей страницы, щелкнув какую-либо ссылку на вашей странице, сделав обработчики кликов для этих ссылок более интеллектуальными.