如何使用 JavaScript 停止浏览器后退按钮?

新手上路,请多包涵

我正在用 PHP 做一个在线测验应用程序。我想限制用户返回考试。

我尝试了以下脚本,但它停止了我的计时器。

我应该怎么办?

计时器存储在文件 cdtimer.js 中。

<script type="text/javascript">
    window.history.forward();
    function noBack()
    {
        window.history.forward();
    }
</script>

<body onLoad="noBack();" onpageshow="if (event.persisted) noBack();" onUnload="">

我有一个考试计时器,它从 MySQL 值中获取考试持续时间。计时器相应地启动,但是当我输入代码以禁用后退按钮时它会停止。我的问题是什么?

原文由 Sawant Akshay 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 722
2 个回答

禁用后退按钮不起作用的原因有很多。最好的办法是警告用户:

 window.onbeforeunload = function() { return "Your work will be lost."; };

此页面确实列出了您 可以 尝试禁用后退按钮的多种方法,但都不能保证:

http://www.irt.org/script/311.htm

原文由 ColinE 发布,翻译遵循 CC BY-SA 3.0 许可协议

覆盖 Web 浏览器的默认行为通常不是一个好主意。 出于安全原因,客户端脚本没有足够的权限执行此操作。

还有一些类似的问题,

您实际上 不能 禁用浏览器后退按钮。但是,您可以使用您的逻辑来变魔术来防止用户导航回来,这会给人一种它被禁用的印象。方法如下 - 查看以下代码片段。

 (function (global) {

    if(typeof (global) === "undefined") {
        throw new Error("window is undefined");
    }

    var _hash = "!";
    var noBackPlease = function () {
        global.location.href += "#";

        // Making sure we have the fruit available for juice (^__^)
        global.setTimeout(function () {
            global.location.href += "!";
        }, 50);
    };

    global.onhashchange = function () {
        if (global.location.hash !== _hash) {
            global.location.hash = _hash;
        }
    };

    global.onload = function () {
        noBackPlease();

        // Disables backspace on page except on input fields and textarea..
        document.body.onkeydown = function (e) {
            var elm = e.target.nodeName.toLowerCase();
            if (e.which === 8 && (elm !== 'input' && elm  !== 'textarea')) {
                e.preventDefault();
            }
            // Stopping the event bubbling up the DOM tree...
            e.stopPropagation();
        };
    }
})(window);

这是纯 JavaScript 编写的,因此它适用于大多数浏览器。它还会禁用 退格 键,但该键将在 input 字段和 textarea 中正常工作。

推荐设置:

将此代码段放在单独的脚本中,并将其包含在您需要此行为的页面上。在当前设置中,它将执行 DOM 的 onload 事件,这是此代码的理想入口点。

工作演示!

它在以下浏览器中进行了测试和验证,

  • 铬合金。
  • 火狐。
  • Internet Explorer (8-11) 和 Edge。
  • 苹果浏览器。

原文由 Rohit416 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题