【问题标题】:Ways to prevent user from reloading/refreshing page in quiz taking application防止用户在测验应用程序中重新加载/刷新页面的方法
【发布时间】:2015-06-01 14:55:59
【问题描述】:

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

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

编辑

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

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

谢谢!

【问题讨论】:

  • onbeforeunload 是你想要的
  • 您是否考虑使用 localStorage 作为测验答案(如果可能)?您可以将答案和进度存储在浏览器上,然后在用户刷新/重新加载网页时从 localStorage 加载。
  • location.replace("nextpage.html") 也是一种适用于不确定用户的措施
  • 如果用户真的想要完全阻止刷新是不可能的。您想通过防止刷新来防止什么?也就是说,您要避免哪些负面影响?
  • @JonathanM 我试图阻止他们重新加载测试并在中途开始。所以,我想我并不是真的想阻止它们重新加载,而是如果它们这样做了就重定向它们。

标签: javascript jquery html web


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 2014-09-03
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多