Есть ли способ в javascript определить, вызвано ли событие выгрузки обновлением, кнопкой возврата или закрытием браузера?

В настоящее время я просматриваю событие «unload» окна, чтобы попытаться определить, как было инициировано событие «unload», но безуспешно. Есть ли способ определить, как было инициировано событие javascript?

  • Обновление страницы
  • Кнопка "Назад" (или переход со страницы)
  • Закрытие браузера

По сути, мне нужно выполнить некоторый код только тогда, когда окно браузера закрывается, а не обновляется и не выполняется переход.

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
31
0
44 564
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Нет, и если бы это было, это зависело бы от браузера. Какой код вы пытаетесь запустить, когда пользователь закрывает страницу? Это для выхода пользователя из системы? Тогда пользователь не выйдет из системы в случае сбоя браузера или разрыва сетевого подключения (и, вероятно, не произойдет, если компьютер перейдет в режим сна / гибернации).

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

Обновление: здесь, в stackoverflow, обнаружен этот ответ.

Я использую метод "обнюхивания" клавиатуры, в котором он ищет клавиши "F5", "ctrl + r", "alt-f4", "backspace" и другие, и если обнаруживает, что они проходят через событие клавиатуры очереди, он устанавливает логические переменные соответствующим образом, чтобы уловить этот статус ... затем я использую обработчик функции onbeforeunload, который проверяет эти логические переменные состояния, чтобы решить, что делать.

Вы даже можете отключать различные нажатия клавиш (например, «ctrl + n» или «F1») с помощью preventDefault (), bubble = false и returnValue = false при работе с клавиатурой.

Этот материал не для слабонервных, но его, безусловно, можно сделать с некоторой настойчивостью и большим количеством кроссбраузерных тестов!

Не работает вообще, когда щелчок кнопка закрытия с мышь.

deceze 10.03.2010 09:34

Почему так много голосов против? Это вполне реальное решение! @deceze Нажатие кнопки закрытия с помощью мыши просто запускает событие onbeforeunload, приведенный выше ответ не противоречит этому. Оператор if, проверяющий вышеупомянутые нажатия клавиш для обнаружения перезагрузки страницы, и оператор else, обрабатывающий закрытие окна «с помощью мыши», должны помочь вам.

jahackbeth 04.03.2015 09:32

@jahackbeth Вопрос заключался в том, возможно ли выделить "pageunloads" между кнопкой возврата, перезагрузкой или закрытием окна. Это вроде как можно сделать, если действие было запущено с клавиатуры, да. Моя критика заключается в том, что это невозможно, если действие запускается через графический интерфейс, что, я бы сказал, в большинстве случаев.

deceze 04.03.2015 09:42

@deceze Ааа, правильно! Я не уловил, что вы хотели сказать, что события мыши для кнопок закрытия и перезагрузки браузера неотличимы через javascript.

jahackbeth 04.03.2015 09:47

Да, выход есть!

Я разработал решение, основанное на событиях onBeforeUnload + onLoad, локальном хранилище HTML5 и взаимодействии клиент / сервер. Подробности смотрите на https://stackoverflow.com/a/13916847/698168.

Другие вопросы по теме