Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阻止用户刷新页面,改为重定向_Javascript_Angularjs_Redirect_Refresh - Fatal编程技术网

Javascript 阻止用户刷新页面,改为重定向

Javascript 阻止用户刷新页面,改为重定向,javascript,angularjs,redirect,refresh,Javascript,Angularjs,Redirect,Refresh,我正在创建一个测验web应用程序,在游戏过程中我想阻止用户刷新页面,这样计时器就不会重新启动 我的应用程序在游戏结束时自动保存分数(当所有问题都已回答或超时),但问题是当我刷新页面时(在超时之前),它仍在工作(计时器重新启动,因此玩家可以作弊,有额外的时间思考和回答,甚至检查正确答案) 我试图阻止刷新事件,我可以停用F5并重新加载按钮,但按地址栏上的enter键仍然有效。。我意识到不可能阻止所有刷新事件,因此我尝试着换一种想法: 当玩家点击刷新时,我希望他被重定向到主菜单 播放的类别将自动停用(

我正在创建一个测验web应用程序,在游戏过程中我想阻止用户刷新页面,这样计时器就不会重新启动

我的应用程序在游戏结束时自动保存分数(当所有问题都已回答或超时),但问题是当我刷新页面时(在超时之前),它仍在工作(计时器重新启动,因此玩家可以作弊,有额外的时间思考和回答,甚至检查正确答案)

我试图阻止刷新事件,我可以停用F5并重新加载按钮,但按地址栏上的enter键仍然有效。。我意识到不可能阻止所有刷新事件,因此我尝试着换一种想法:

  • 当玩家点击刷新时,我希望他被重定向到主菜单
  • 播放的类别将自动停用(因此刷新将被视为作弊)
  • 任何JS脚本都能帮我做到这一点吗


    如果您对此类应用程序有任何其他建议,也会很好。

    这里有一个窍门。只需在用户浏览器中设置cookie一段时间,然后检查cookie是否存在。如果它在那里,他正在尝试刷新页面,您应该将其重定向到主页,然后您可以删除cookie。您的代码应该如下所示

     <?php
    
    if(isset($_COOKIE['Test']))
    {
    header("location:quiz.php");
    }
    else
    {
    // Your stuff
    }
        setcookie("quiz1",$value, time()+3600*24); // name should be unique otherwise you won't be able to use it on the next page
    ?>
    

    您可以使用
    window.onbeforeunload
    检测页面的更改并执行一些操作

        window.onbeforeunload = function (e) {
        var e = e || window.event;
        // Do some controls here ...
        // Do synchrone call here ...
        // Message in the confirmation dialog
    
        // For IE and Firefox
       if (e) {
         e.returnValue = 'Are you sure want to quit this quiz';
       }
    
       // For Safari
       return 'Are you sure want to quit this quiz';
    
       };
    

    下面是jquery中的一些示例,可能会对您有所帮助

    // slight update to account for browsers not supporting e.which
    function disableF5(e) { if ((e.which || e.keyCode) == 116) e.preventDefault(); };
    // To disable f5
        /* jQuery < 1.7 */
    $(document).bind("keydown", disableF5);
    /* OR jQuery >= 1.7 */
    $(document).on("keydown", disableF5);
    
    // To re-enable f5
        /* jQuery < 1.7 */
    $(document).unbind("keydown", disableF5);
    /* OR jQuery >= 1.7 */
    $(document).off("keydown", disableF5);
    
    //对不支持e.which的浏览器进行轻微更新
    函数disableF5(e){if((e.which | | e.keyCode)==116)e.preventDefault();};
    //禁用f5
    /*jQuery<1.7*/
    $(document).bind(“keydown”,disableF5);
    /*或jQuery>=1.7*/
    $(文档)。打开(“向下键”,禁用F5);
    //要重新启用f5
    /*jQuery<1.7*/
    $(文档)。解除绑定(“向下键”,禁用F5);
    /*或jQuery>=1.7*/
    $(文档).off(“向下键”,禁用F5);
    
    不如保存计时器?检查此处的链接,您可能会发现它很有用:。使用此功能,您可以在用户离开页面之前向其发出带有特定消息的警告。您可以使用cookie,添加页面加载时间,并使用运行时间更新cookie。现在,当用户刷新该页面时,再次检查cookie,并在时间结束时执行所需的任何操作。注意:您必须管理cookie的启动等…这就是人们在flash中使用动作脚本执行此类操作的原因。但是你可以做一件事,就是销毁当前会话并重定向到目标页面。那么这应该发生在客户端的js代码中,还是涉及到服务器端的东西?防止客户端代码被黑客攻击和操纵是非常困难的。服务器端代码,就像@Utkarsh的回答一样,对于这样的问题来说要方便得多。老实说,我以前从未使用过cookies,我不知道如何使用cookies,你能解释一下这个过程吗?