Как определить, была ли вызвана onbeforeunload, нажав на ссылку в Chrome - PullRequest
4 голосов
/ 31 января 2010

Проблема заключается в следующем.

onbeforeunload работает как брелок в Firefox и имеет e.explicitOriginalTarget.activeElement, который показывает, какой элемент был нажат, чтобы вызвать его.

window.onbeforeunload = function(e){
if (e.explicitOriginalTarget.activeElement){
    return;
}

В Chrome объект 'e' выглядит одинаково, когда вы закрываете окно или щелкаете ссылку. Есть ли способ определить цель в хроме?

Ответы [ 3 ]

5 голосов
/ 21 сентября 2011

Поздний ответ, я знаю, но вы всегда можете попробовать это (подтвердил работу в IE):

target = document.activeElement;
alert(target.href);

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

2 голосов
/ 05 апреля 2014

Другой вариант:

$("a").on("click", function(){
  window.last_clicked = $(this);
});

Тогда просто обратитесь к last_clicked из вашего обработчика onbeforeunload. Это лучшее кросс-браузерное решение, которое я нашел, так как document.activeElement ненадежно.

0 голосов
/ 01 февраля 2010

Нет. Целью события является окно или документ, а не ссылка. В отличие от Firefox, Chrome не предоставляет полезных бонусных свойств для объекта события. Лучше всего, чтобы в теле тела был обработчик события щелчка, который проверяет цель события, чтобы определить, является ли она ссылкой, но не является надежной: ссылка может иметь собственный обработчик события щелчка, который предотвращает действие по умолчанию, или пользователь перейдите по ссылке с помощью клавиатуры, в этом случае событие щелчка не будет запущено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...