有没有办法绑定一个jQuery事件,以便在访问者按住按钮超过3秒后弹出?在这种情况下,我想在用户持有f5 3秒后做一些事情。
我找到了一个解决方案,当用户在此处按下f5时会阻止刷新:
Disable F5 and browser refresh using javascript
但是,这并不是我想要的,因为我想允许我的用户刷新页面但是阻止他们在f5按钮上放置一块石头可以说(这是一个在线游戏,你可以通过刷新页面来完成任务。)
我正在尝试做什么?
编辑:我正在寻找一个短期,快速,客户端修复。事情的服务器端将在稍后解决。
答案 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编译器或非常好的混淆器运行脚本。 : - )