当前位置:  开发笔记 > 编程语言 > 正文

防止使用JavaScript导航网页

如何解决《防止使用JavaScript导航网页》经验,为你挑选了5个好方法。

如何防止网页使用JavaScript导航?



1> Jimmie R. Ho..:

使用onunload只允许您显示消息,但它不会中断导航(因为为时已晚).但是,你可以使用onbeforeunload它会中断导航:

window.onbeforeunload = function() {
  return "Are you sure you want to navigate away?";
}

编辑:confirm()在return语句中删除,因为这导致了预期的确认窗口,但也显示第二次确认与第一次确认的结果.


浏览器将显示适当的提示.只需使用`window.onbeforeunload = function(){return""; }`

2> anarchocurio..:

与此处介绍的其他方法不同,这段代码不会导致浏览器显示警告,询问用户是否要离开; 相反,它利用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);
})();

免责声明:你永远不应该这样做.如果页面上有破坏框架的代码,请尊重作者的意愿.



3> Danger..:

我最终得到了这个略有不同的版本:

var dirty = false;
window.onbeforeunload = function() {
    return dirty ? "If you leave this page you will lose your unsaved changes." : null;
}

在其他地方,当表单变脏时(或者我想阻止导航),我将脏标志设置为true.这使我可以轻松控制用户是否获得确认导航提示.

使用所选答案中的文本,您会看到多余的提示:

在此输入图像描述


在IE中如果dirty为false,将显示字符串'null'.只需将其包装在if语句中即可.请参阅:http://stackoverflow.com/questions/11793996/onbeforeunload-handler-says-null-in-ie

4> gabor..:

在Ayman的例子中,返回false会阻止浏览器窗口/选项卡关闭.

window.onunload = function () {
  alert('You are trying to leave.');
  return false;
}


除非浏览器是Opera,否则如果正在关闭选项卡/窗口/程序,它将跳过onunload事件.

5> Paul Weber..:

使用现代的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

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有