Предотвратите предупреждение onbeforeunload, используя jquery в Firefox и IE - PullRequest
5 голосов
/ 31 мая 2019

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

Это диалоговое окно отображается в действии "Моя форма публикации".

Я использовал event.preventDefault() (для браузеров, кроме Safari) и return null для Safari, чтобы не показывать этот диалог в форме действия после публикации.Но это не работает в Firefox и IE.

Ниже приведен пример кода jquery

if (!isSafari) {
        window.addEventListener("beforeunload", function (event) {
            if (!hideDefaultAlert) {
                event.returnValue = "Your unsaved changes will be lost";
            } else {
                event.preventDefault();
                hideDefaultAlert = false;
            }
        });
    } else if (isSafari) {
        $(window).on("beforeunload", function () {
            if (!hideDefaultAlert) {
                return "Your unsaved changes will be lost";
            } else {
                hideDefaultAlert = false;
                return null;
            }           
        });
    }

Пожалуйста, предоставьте решение для предотвращения этого предупреждения в Firefox и Safari.

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

1 Ответ

1 голос
/ 05 июня 2019

Если браузер не Safari и если форма не изменена, нет необходимости отображать диалоговое окно. Поэтому попробуйте изменить ваш код, как показано ниже (удалите event.preventDefault ()):

        var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor") > 0;
        var hideDefaultAlert = true;
        if (!isSafari) {
            alert("not safari");
            window.addEventListener("beforeunload", function (event) {
                if (!hideDefaultAlert) {
                    event.returnValue = "Your unsaved changes will be lost";
                } else {
                    //event.preventDefault(); //remove this line
                    hideDefaultAlert = false;
                }
            });
        }
...