В настоящее время я просматриваю событие «unload» окна, чтобы попытаться определить, как было инициировано событие «unload», но безуспешно. Есть ли способ определить, как было инициировано событие javascript?
По сути, мне нужно выполнить некоторый код только тогда, когда окно браузера закрывается, а не обновляется и не выполняется переход.
Цель: Когда клиент выполняет обновление нашего программного обеспечения, обновление перенаправляет его первый интернет-запрос на страницу предложения. Есть кнопка для опции «Не беспокоить», но некоторые пользователи просто закрывают свой браузер. После закрытия браузера мне нужно продублировать функцию «Не беспокоить», чтобы пользователь больше не перенаправлялся на страницу предложения. Просто присоединиться к событию «выгрузка» не получится из-за разных способов покинуть страницу.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Нет, и если бы это было, это зависело бы от браузера. Какой код вы пытаетесь запустить, когда пользователь закрывает страницу? Это для выхода пользователя из системы? Тогда пользователь не выйдет из системы в случае сбоя браузера или разрыва сетевого подключения (и, вероятно, не произойдет, если компьютер перейдет в режим сна / гибернации).
Если это сделано для выхода из системы, вам, вероятно, следует использовать переменную отметки времени на сервере, которая обновляется при каждом запросе (или использовать ajax-ping), и выйти из системы, если она не была видна в течение определенного времени.
Обновление: здесь, в stackoverflow, обнаружен этот ответ.
Я использую метод "обнюхивания" клавиатуры, в котором он ищет клавиши "F5", "ctrl + r", "alt-f4", "backspace" и другие, и если обнаруживает, что они проходят через событие клавиатуры очереди, он устанавливает логические переменные соответствующим образом, чтобы уловить этот статус ... затем я использую обработчик функции onbeforeunload, который проверяет эти логические переменные состояния, чтобы решить, что делать.
Вы даже можете отключать различные нажатия клавиш (например, «ctrl + n» или «F1») с помощью preventDefault (), bubble = false и returnValue = false при работе с клавиатурой.
Этот материал не для слабонервных, но его, безусловно, можно сделать с некоторой настойчивостью и большим количеством кроссбраузерных тестов!
Почему так много голосов против? Это вполне реальное решение! @deceze Нажатие кнопки закрытия с помощью мыши просто запускает событие onbeforeunload, приведенный выше ответ не противоречит этому. Оператор if, проверяющий вышеупомянутые нажатия клавиш для обнаружения перезагрузки страницы, и оператор else, обрабатывающий закрытие окна «с помощью мыши», должны помочь вам.
@jahackbeth Вопрос заключался в том, возможно ли выделить "pageunloads" между кнопкой возврата, перезагрузкой или закрытием окна. Это вроде как можно сделать, если действие было запущено с клавиатуры, да. Моя критика заключается в том, что это невозможно, если действие запускается через графический интерфейс, что, я бы сказал, в большинстве случаев.
@deceze Ааа, правильно! Я не уловил, что вы хотели сказать, что события мыши для кнопок закрытия и перезагрузки браузера неотличимы через javascript.
Да, выход есть!
Я разработал решение, основанное на событиях onBeforeUnload + onLoad, локальном хранилище HTML5 и взаимодействии клиент / сервер. Подробности смотрите на https://stackoverflow.com/a/13916847/698168.
Не работает вообще, когда щелчок кнопка закрытия с мышь.