如何防止网页使用 JavaScript 导航?
使用 JavaScript 防止网页导航离开
IT技术
javascript
onbeforeunload
2021-02-01 00:21:00
6个回答
使用onunload
允许您显示消息,但不会中断导航(因为为时已晚)。但是,使用onbeforeunload
会中断导航:
window.onbeforeunload = function() {
return "";
}
注意:返回空字符串是因为较新的浏览器提供了诸如“任何未保存的更改都将丢失”之类的无法覆盖的消息。
在较旧的浏览器中,您可以指定要在提示中显示的消息:
window.onbeforeunload = function() {
return "Are you sure you want to navigate away?";
}
与这里介绍的其他方法不同,这段代码不会导致浏览器显示警告,询问用户是否要离开;相反,它利用 DOM 的事件特性在浏览器有机会从内存中卸载它之前重定向回当前页面(从而取消导航)。
由于它是直接短路导航工作的,所以不能用来防止页面被关闭;但是,它可用于禁用帧破坏。
(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);
})();
免责声明:您永远不应该这样做。如果页面上有破坏框架的代码,请尊重作者的意愿。
使用现代 addEventListener API 以更现代和浏览器兼容的方式等效。
window.addEventListener('beforeunload', (event) => {
// Cancel the event as stated by the standard.
event.preventDefault();
// Chrome requires returnValue to be set.
event.returnValue = '';
});
来源:https : //developer.mozilla.org/en-US/docs/Web/Events/beforeunload
我最终得到了这个略有不同的版本:
var dirty = false;
window.onbeforeunload = function() {
return dirty ? "If you leave this page you will lose your unsaved changes." : null;
}
在其他地方,当表单变脏时,我将脏标志设置为 true(或者我想防止导航离开)。这让我可以轻松控制用户是否收到确认导航提示。
对于所选答案中的文本,您会看到多余的提示:
在 Ayman 的示例中,通过返回 false 可以防止浏览器窗口/选项卡关闭。
window.onunload = function () {
alert('You are trying to leave.');
return false;
}