Подтвердить что ты не робот

Как узнать время простоя браузера?

Как я могу отслеживать время простоя браузера? Я использую IE8.

Я не использую никакого управления сеансом и не хочу обрабатывать его на стороне сервера.

4b9b3361

Ответ 1

Вот простой способ 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.

Ответ 3

Слишком поздно ответить, но это может помочь кому-то написать чистое и практичное решение. Это идеальное решение, когда вам не нужно отображать время, оставшееся до окончания сеанса. Хорошо игнорировать 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

Ответ 4

Здесь используется подход с использованием 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');
    }
});

Ответ 5

Мне нужна была аналогичная вещь и она была создана: 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)