Хобрук: Ваш путь к мастерству в программировании

Выход со страницы по гиперссылке не перехватывается onberforeunload

У меня есть метод onberforeunload, который правильно предупреждает пользователя, когда он пытается закрыть вкладку или браузер, используя следующий код:

window.onbeforeunload = function(event) {

                event.returnValue = 'Are you sure you want to leave/';
                console.log(event.returnValue);

    };

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

Я искал много способов создать всплывающее окно при выборе гиперссылки, но все они имеют дело с одной или группами гиперссылок в тегах div. Я хочу, чтобы всплывающее окно отображалось, если выбрана какая-либо гиперссылка.

Почему onbeforeunload не ловит выход со страницы по гиперссылке? Правильно ли я понимаю onbeforeunload, что он должен перехватывать выходы по гиперссылкам?

ОБНОВЛЕНИЕ

Я обновил код до следующего:

window.onbeforeunload = closeIT;
function closeIT() {
        return 'here';
        if(searchOnGoing){
            return 'Ifs you leave the Youtube History page now the application will not finish';
        }

};

Он по-прежнему не работает для гиперссылок и работает для закрытия браузера и вкладок. Я запускаю это как часть сценария содержимого в расширении Chrome, которое внедряет сценарий содержимого на страницу. Повлияло бы это на него?

У меня также есть подписка onunload, мне интересно, повлияет ли это на это?

window.onunload = function(event){
            //Do something
    }


Ответы:


1

Собственно, должно сработать. Вы как-то ловите событие через прослушиватель кликов? В любом случае, вы можете показать предупреждение с помощью прослушивателя событий щелчка. Следующий фрагмент кода копируется из аналогичного вопроса: как определить, была ли нажата ссылка, когда срабатывает window.onbeforeunload? Здесь вопрос, напротив, заключался в том, как предотвратить событие beforeunload при нажатии на ссылку.

var link_was_clicked = false;
document.addEventListener("click", function(e) {
  if (e.target.nodeName.toLowerCase() === 'a') {
    link_was_clicked = true;
  }
}, true);

window.onbeforeunload = function() {
  if(link_was_clicked) {
    link_was_clicked = false;
    return;
  }
  //other code here
}
21.03.2016

2

В следующем фрагменте правильно используется onbeforeunload.

    <body onbeforeunload="return myFunction()">
    
    <a href="google.com">Click me!</a>
          
    <script>
    function myFunction() {
        return "Please don't go!\nThis works beautifully!";
    }
    </script>

21.03.2016
Новые материалы

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...