在Firefox和IE中使用jquery防止onbeforeunload警报

时间:2019-05-31 10:27:08

标签: jquery internet-explorer firefox onbeforeunload

我使用onbeforeunload事件在用户尝试离开页面时显示默认警报框。

此对话框显示在“表单发布”操作中。

我已使用event.preventDefault()(用于Safari浏览器以外的浏览器)和return null(用于Safari)来防止在Form post操作中显示此对话框。但这在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中出现此警报。

先谢谢了。

2 个答案:

答案 0 :(得分:1)

如果浏览器不是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;
                }
            });
        }

答案 1 :(得分:0)

解决方案是,需要将event.preventDefault()替换为event.stopPropagation()return undefined。该解决方案可在所有浏览器中使用。

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