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