如何防止网页使用JavaScript导航?
使用onunload
只允许您显示消息,但它不会中断导航(因为为时已晚).但是,你可以使用onbeforeunload
它会中断导航:
window.onbeforeunload = function() { return "Are you sure you want to navigate away?"; }
编辑:confirm()
在return语句中删除,因为这导致了预期的确认窗口,但也显示第二次确认与第一次确认的结果.
与此处介绍的其他方法不同,这段代码不会导致浏览器显示警告,询问用户是否要离开; 相反,它利用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); })();
免责声明:你永远不应该这样做.如果页面上有破坏框架的代码,请尊重作者的意愿.
我最终得到了这个略有不同的版本:
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; }
使用现代的addEventListener API,以更现代且与浏览器兼容的方式进行等效。
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