0

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

我找到了一个解决方案,当用户在这里按 f5 时阻止刷新:

使用 javascript 禁用 F5 和浏览器刷新

但是,这并不是我想要的,因为我想让我的用户刷新页面,但可以防止他们在 f5 按钮上放置石头(这是一个在线游戏,您可以通过刷新页面)。

我想要做的甚至可能吗?

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

4

2 回答 2

7

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

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

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

虽然如果问题是用户正在利用这个问题,修复它客户端不会工作很长时间,用户会很快发现另一种解决方法。

于 2013-02-13T14:31:27.667 回答
1

PhonicUK 的回答(做服务器端)是处理这个问题的唯一正确方法。但是您在对该答案的评论中说:

我只是被要求现在应用一个快速的客户端修复。这就是为什么我要问这是否可能。

有可能做一些被绕过的事情,像这样(这里我假设你使用一个 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 编译器或非常好的混淆器运行脚本。:-)

于 2013-02-13T14:39:09.643 回答