阻止用户持有f5超过x秒?

时间:2013-02-13 14:29:16

标签: javascript jquery

有没有办法绑定一个jQuery事件,以便在访问者按住按钮超过3秒后弹出?在这种情况下,我想在用户持有f5 3秒后做一些事情。

我找到了一个解决方案,当用户在此处按下f5时会阻止刷新:

Disable F5 and browser refresh using javascript

但是,这并不是我想要的,因为我想允许我的用户刷新页面但是阻止他们在f5按钮上放置一块石头可以说(这是一个在线游戏,你可以通过刷新页面来完成任务。)

我正在尝试做什么?

编辑:我正在寻找一个短期,快速,客户端修复。事情的服务器端将在稍后解决。

2 个答案:

答案 0 :(得分:7)

这是您真正需要解决服务器端的问题。如果可以通过刷新页面来完成任务,那么可以通过机器人或禁用您的检查的一行或两行脚本来完成。做这个客户端并不会真正帮助你。

在这种情况下您需要做的就是在用户会话上,跟踪上次执行操作X的时间,并且除非超过Y秒,否则不要再次执行,并告诉用户尝试做得太快了。

编辑:作为一个快速入侵,您可以做的是配置您的网络服务器,在响应中为受影响的脚本提供cache-control标头,其值设置为内容在Y秒内到期。这个可能(强调可能,首先正确测试!)阻止客户端在正常的'F5'上重新请求页面,但强制刷新(某些浏览器中的ctrl + f5)赢了“受此影响。

虽然问题是用户正在利用此问题,但修复客户端将无法长时间工作,用户将很快发现另一种方式。

答案 1 :(得分:1)

PhonicUK's answer(服务器方面)是解决此问题的唯一正确方法。但是你在对这个答案的评论中说:

  

我刚才被要求快速应用客户端修复程序。这就是为什么我在问这是否可能。

可以做一些被绕过的东西,就像这样(这里我假设您使用的是jQuery cookie插件):

(function($) {

    $(document).on("keydown", function(e) {
        var lastRefresh, now;

        if (e.which == 116) {
            now = new Date().getTime();
            lastRefresh = $.cookie("lastRefresh");
            if (lastRefresh && (now - parseInt(lastRefresh, 10)) < 3000) {
                e.preventDefault();
            }
            $.cookie("lastRefresh", now);
        }
    });

})(jQuery);

但是,用户找到解决方法。

确保通过Closure编译器或非常好的混淆器运行脚本。 : - )