Как я могу отслеживать время простоя браузера? Я использую IE8.
Я не использую никакого управления сеансом и не хочу обрабатывать его на стороне сервера.
Как я могу отслеживать время простоя браузера? Я использую IE8.
Я не использую никакого управления сеансом и не хочу обрабатывать его на стороне сервера.
Вот простой способ JavaScript отслеживать время простоя и когда он достигает определенного предела, выполните некоторые действия:
var IDLE_TIMEOUT = 60; //seconds
var _idleSecondsTimer = null;
var _idleSecondsCounter = 0;
document.onclick = function() {
_idleSecondsCounter = 0;
};
document.onmousemove = function() {
_idleSecondsCounter = 0;
};
document.onkeypress = function() {
_idleSecondsCounter = 0;
};
_idleSecondsTimer = window.setInterval(CheckIdleTime, 1000);
function CheckIdleTime() {
_idleSecondsCounter++;
var oPanel = document.getElementById("SecondsUntilExpire");
if (oPanel)
oPanel.innerHTML = (IDLE_TIMEOUT - _idleSecondsCounter) + "";
if (_idleSecondsCounter >= IDLE_TIMEOUT) {
window.clearInterval(_idleSecondsTimer);
alert("Time expired!");
document.location.href = "logout.html";
}
}
#SecondsUntilExpire { background-color: yellow; }
You will be auto logged out in <span id="SecondsUntilExpire"></span> seconds.
Надеюсь, это то, что вы ищете jquery-idletimer-plugin
Слишком поздно ответить, но это может помочь кому-то написать чистое и практичное решение. Это идеальное решение, когда вам не нужно отображать время, оставшееся до окончания сеанса. Хорошо игнорировать setInterval()
, который продолжает работать script через время выполнения приложения.
var inactivityTimeOut = 10 * 1000, //10 seconds
inactivitySessionExpireTimeOut = '';
setSessionExpireTimeOut();
function setSessionExpireTimeOut () {
'use strict';
clearSessionExpireTimeout();
inactivitySessionExpireTimeOut = setTimeout(function() {
expireSessionIdleTime();
}, inactivityTimeOut);
}
function expireSessionIdleTime () {
'use strict';
console.log('user inactive for ' + inactivityTimeOut + " seconds");
console.log('session expired');
alert('time expired');
clearSessionExpireTimeout();
document.location.href = "logout.html";
}
function clearSessionExpireTimeout () {
'use strict';
clearTimeout(inactivitySessionExpireTimeOut);
}
Running example: Timeout alert will be popped up in 10 seconds
Здесь используется подход с использованием jquery, поскольку мне нужно сохранить существующие события клавиатуры в документе.
Мне также нужно было делать разные вещи в разные промежутки времени, поэтому я завернул его в функцию
var onIdle = function (timeOutSeconds,func){
//Idle detection
var idleTimeout;
var activity=function() {
clearTimeout(idleTimeout);
console.log('to cleared');
idleTimeout = setTimeout(func, timeOutSeconds * 1000);
}
$(document).on('mousedown mousemove keypress',activity);
activity();
}
onIdle(60*60,function(){
location.reload();
});
onIdle(30,function(){
if(currentView!=='welcome'){
loadView('welcome');
}
});
Мне нужна была аналогичная вещь и она была создана: https://github.com/harunurhan/idlejs
Это простой, настраиваемый и мощный способ, без каких-либо зависимостей. Вот пример.
import { Idle } from 'idlejs/dist';
// with predefined events on `document`
const idle = new Idle()
.whenNotInteractive()
.within(60)
.do(() => console.log('IDLE'))
.start();
Вы также можете использовать персонализированные целевые события и события
const idle = new Idle()
.whenNot([{
events: ['click', 'hover'],
target: buttonEl,
},
{
events: ['click', 'input'],
target: inputEl,
},
])
.within(10)
.do(() => called = true)
.start();
(написано в typescript и скомпилировано до es5)