在测验应用程序中阻止用户重新加载/刷新页面的方法

时间:2015-06-01 14:56:00

标签: javascript jquery html web

我目前正试图找出一种策略,即在测验期间不允许用户刷新/重新加载页面。我知道完全禁用浏览器中的重新加载功能并不是一个好主意,甚至是不可能的,但有没有其他方法可以让用户无法通过重新加载页面来重启检查?

我目前没有显示后退按钮的浏览器窗口,并且不允许输入网址。我知道我可以通过右键单击鼠标来禁用上下文菜单,但仍然允许用于重新加载页面的键盘快捷键。关于如何处理这个问题的任何想法?

修改

我应该改变这意味着我实际上并没有尝试禁用浏览器重新加载功能,而是如果用户确实尝试重新加载,我想重定向它们以便测试结束,或者发生其他一些事件而不是重新开始测试。

目前,我正在使用localStorage变量来指示它是否重新加载并从那里开始。这是最好的解决方案吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

如果您尝试仅使用客户端技术(javascript)来保护Web应用程序,那么您正在进行一场艰难的,无法取胜的战斗。总有办法绕过你正在尝试的措施。

一个可行的解决方案是在每个用户决定后跟踪测验进度服务器端。这样,如果用户尝试重新加载(或以其他方式重新开始,重新回答或跳过),您只需将它们返回到它们所属的位置即可。

答案 1 :(得分:0)

我可以想出一个可以检测页面是否刷新的解决方案。

如果您正在使用PHP,则可以在加载时设置SESSION变量,然后检查该变量是否已设置

    <?php
       if(!isset$_SESSION['loaded'])
       {
          $_SESSION['loaded'] = 1;
       }
       else
       {
           echo 'You refreshed, your quiz is over ;-) ';
       }
    ?>

至于禁用刷新,你将接近恶意软件来实现它,即。从JavaScript中过滤“F5”键或“Ctrl + R”的所有键盘输入,并在输入这些快捷键时忽略键盘输入。我不确定这是否可行/道德