我经常访问的一个网站使用了以下 javascript
function idle() {
$(document).unbind('mousemove');
$(document).unbind('keydown');
$(document).on('mousemove', function () {
resetTimebomb('keydown');
});
$(document).on('keydown', function () {
resetTimebomb('mousemove');
});
setTimeout('idle();', 60000);
}
function resetTimebomb(psUnbind) {
$(document).unbind(psUnbind);
$.ajax({
global: false,
url: '/internal/reset_timebomb.php',
success: function (sData) {
if ($.trim(sData).length && sData != 'STILL_LOGGED_IN') {
timeout();
}
}
});
}
function timeout() {
var sReturnTo = '&return_to=' + encodeURIComponent(window.location.pathname + window.location.search);
var sReturnToUser = typeof (iLoggedInUserID) != 'undefined' ? '&return_to_user=' + iLoggedInUserID.toString() : '';
window.location = '/index.php?message=TIMEOUT' + sReturnTo + sReturnToUser;
}
而且该 js 出现在数千行长的 js 文件的中间。这个 js 会在相当短的时间内导致自动注销,如果我没有这么快被启动,我会很高兴的。“60000”的超时时间似乎是 10 分钟。无论用什么方法,我都想
1) 增加超时时间,或
2) 完全消除超时功能,或
3) 模拟活动,即使窗口不在焦点上,也能触发超时重置。
我会使用 NoScript 之类的东西,但我需要允许页面上的所有其他脚本。我需要颠覆的正是这些位于庞大文件中的特定函数。
谢谢。
如果解决方案涉及利用运行 Tomato 固件变体的路由器,我将不胜感激,这样我的所有设备(包括平板电脑)都可以从该解决方案中受益。
答案1
不,不,不……你在这一点上有一些误解。
“60000”的超时似乎是10分钟
60000 毫秒 = 60 秒 = 1 分钟
setTimeout
基本上会给你延迟。它不是一个计时器。它只是意味着在你的情况下function idle()
将在 1 分钟后执行。
如果你想摆脱计时器并继续你的游戏,这里有一个小技巧。
只需编辑一行..
success: function (sData) {
if ($.trim(sData).length && sData != 'STILL_LOGGED_IN') {
timeout();//erase this like,comment it out.
}
将其转换为:
if ($.trim(sData).length && sData != 'STILL_LOGGED_IN') {
}
timeout() 会在一段时间后将您重定向到...为避免这种情况,请不要调用它。