我使用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中出现此警报。
先谢谢了。
答案 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;
}
});
}