我遇到一个问题,当用户持有F5 10-15分钟时网页变得无法响应,最后IIS会抛出错误。
要管理这个,我想限制用户在一定次数后按F5(锁定F5事件)。经过一段时间间隔说5分钟后,我想启用刷新功能(解锁F5事件)。
我使用cookie来保存用户按下F5的次数。要处理cookie,我使用了here提到的代码。
指定一个事件来检查F5是否按下按键。
$(document).on("keydown", tryingF5);
我使用变量来保存cookie值,并在用户按下F5后递增它。
var numberOfF5Click = 1;
var thresholdClick = 10;
var numberOfF5Click = 1;
function tryingF5(e) {
if ((e.which || e.keyCode) == 116) {
//alert(numberOfF5Click);
if (numberOfF5Click > thresholdClick) {
e.preventDefault();
alert("Multiple refresh has been prevented for some time!!");
}
numberOfF5Click = numberOfF5Click + 1;
docCookies.setItem("NumberOfF5Click", numberOfF5Click);
//alert("F5 Clicked =" + numberOfF5Click);
};
};
完整代码在此处设置:JSBin
问题:代码没有按预期工作,有些东西是n,我怎么能做得更好?
答案 0 :(得分:0)
试试这个:
var everyXMinutes = 5 * 1000; // 5 seconds
var maxPerEveryXMinutes = 5; // 5 times per x seconds.
document.onkeydown = function (e) {
if (e.keyCode === 116) {
if (!localStorage.refreshments) {
localStorage.refreshments = JSON.stringify([]);
}
var refreshments = JSON.parse(localStorage.refreshments);
var date = new Date();
if (date.getTime() - refreshments[refreshments.length - 1] >= everyXMinutes) {
refreshments = [];
} else if (refreshments.length >= maxPerEveryXMinutes) {
alert("You must wait " + ((everyXMinutes - (date.getTime() - refreshments[refreshments.length - 1])) / 1000) + "s in order to be able to use the refresh function.");
return false;
}
refreshments.push(date.getTime());
localStorage.refreshments = JSON.stringify(refreshments);
}
};