Предотвратить веб-страницы при переходе на JavaScript

Как предотвратить веб-страницы перейти на JavaScript?

Комментарии к вопросу (4)
Решение

С помощью метода onunloadпозволяет только выводить сообщения, но это будет не прерывать судоходства (потому что это слишком поздно). Однако, вы можете использоватьonbeforeunload` и он будет прерывать навигации:

window.onbeforeunload = function() {
  return "Are you sure you want to navigate away?";
}

Редактировать: удаление подтвердить () в оператор return, как это вызвано окно подтверждения, как ожидалось, но и показал второй подтвердить результат первого подтверждения.

Комментарии (2)

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

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

(function () {
    var location = window.document.location;

    var preventNavigation = function () {
        var originalHashValue = location.hash;

        window.setTimeout(function () {
            location.hash = 'preventNavigation' + ~~ (9999 * Math.random());
            location.hash = originalHashValue;
        }, 0);
    };

    window.addEventListener('beforeunload', preventNavigation, false);
    window.addEventListener('unload', preventNavigation, false);
})();

Предупреждение: Вы никогда не должны делать этого. Если страница имеет рамку перебора кода на нем, пожалуйста, уважать пожелания автора.

Комментарии (2)

Я закончил с этим немного другая версия:

var dirty = false;
window.onbeforeunload = function() {
    return dirty ? "If you leave this page you will lose your unsaved changes." : null;
}

В другом месте я поставил грязный флаг в true, когда форма получает загадили (или я иначе хочу допустить перехода). Это позволяет мне легко контролировать, если пользователь получает подтверждение навигационной строке.

С текстом выбранного ответа вы увидите дополнительные запросы:

Комментарии (3)

В Айман'ы например, вернув значение false предотвратить вкладке окна браузера/закрытия.

window.onunload = function () {
  alert('You are trying to leave.');
  return false;
}
Комментарии (1)

Эквивалент в более современный и совместимый браузер, используя современные метода addEventListener Апис.

window.addEventListener("beforeunload", function (e) {
  var confirmationMessage = "\o/";

  e.returnValue = confirmationMessage;     // Gecko and Trident
  return confirmationMessage;              // Gecko and WebKit
});

Источник: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

Комментарии (1)

Эквивалентно принято отвечать в jQuery 1.11:

$(window).on("beforeunload", function () {
    return "Please don't leave me!";
});

[JSFiddle пример](http://jsfiddle.net/485xsaao/)

altCognito'ы ответьте использовал разгрузить событие, которое происходит слишком поздно для JavaScript, чтобы прервать навигации.

Комментарии (0)

Применение метода onunload.

Для jQuery, я думаю, это работает так:

$(window).unload(function() { 
  alert("Unloading"); 
  return falseIfYouWantToButBeCareful();
});
Комментарии (2)

Что предложено, сообщение об ошибке может дублировать сообщение об ошибке в браузере уже отображается. В хром, в 2 похожих сообщения об ошибках отображаются одна после другой в том же окне.

В Chrome, текст, отображаемый после таможни сообщение: "и вы уверены, что хотите покинуть эту страницу?&и". В Firefox, он не отображает наше пользовательское сообщение об ошибке на всех (но по-прежнему отображается диалоговое окно).

Может быть более подходящее сообщение об ошибке:

window.onbeforeunload = function() {
    return "If you leave this page, you will lose any unsaved changes.";
}

Или стиль и StackOverflow: "Вы начали писать или редактировать пост.&и"

Комментарии (0)

Если вы не поймать браузере кнопку Назад/Вперед и Дон'т хотите, чтобы уйти, вы можете использовать:

window.addEventListener('popstate', function() {
    if (window.location.origin !== 'http://example.com') {
        // Do something if not your domain
    } else if (window.location.href === 'http://example.com/sign-in/step-1') {
        window.history.go(2); // Skip the already-signed-in pages if the forward button was clicked
    } else if (window.location.href === 'http://example.com/sign-in/step-2') {
        window.history.go(-2); // Skip the already-signed-in pages if the back button was clicked
    } else {
        // Let it do its thing
    }
});

В противном случае, вы можете использовать [beforeunload](https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload событие), но сообщение может или не может работать кросс-браузер, и требует возвращения что-то, что заставляет встроенную подсказку.

Комментарии (0)