Как вызвать внешнюю функцию внутри onbeforeunload (), если пользователь решает выйти со страницы? - PullRequest
0 голосов
/ 25 августа 2018

Я видел много примеров и пробовал их, где указанная функция вызывается, если пользователь решает остаться на странице. Мне нужно вызвать внешнюю функцию непосредственно перед тем, как страница будет выгружена, если пользователь решит покинуть страницу.

onbeforeunload = function(){
  if(user decides to leave the page){
      func1();
  }
  else {
    //Don't do anything
  }
}

Я пытался использовать "onunload", но мне нужно запросить пользователя перед вызовом функции.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Вы должны использовать как window.onbeforeunload, так и window.onunload. onbeforeunload возвращает строку, и браузер отображает подтверждение перед выходом. Если пользователь подтвердит выход, будет запущено onunload, а затем вы сделаете то, что вам нужно, прежде чем страница будет выгружена.

window.onbeforeunload = function() {
    return "Are you sure you want to leave?";
};
window.onunload = function() {
    func1();
};

Существуют ограничения на то, что вы можете делать в обоих этих обработчиках событий, потому что вы не можете запретить пользователю покидать страницу, если он действительно этого хочет. Вредоносное ПО использовало эти события для повторного открытия страницы, теперь это запрещено.

0 голосов
/ 25 августа 2018

Похоже, вы пытаетесь запустить какой-то пользовательский код до того, как пользователь покидает страницу, если beforeunload не работает для вас, потому что браузер отключается до запуска вашего кода, вы можете вместо этого добавить mouseleave слушатель событий document. Если мышь пользователя покидает документ, вполне вероятно, что он покидает вашу страницу (чтобы закрыть страницу, изменить вкладки, использовать другую программу на своем компьютере и т. Д.).

document.addEventListener('mouseleave', () => {
	console.log('mouse left the document');
	// your code or function here
});

Попробуйте запустить приведенный выше фрагмент и переместите указатель мыши в поле результатов и из него.

...