Попробуйте это, он использует jquery-cookie, которые вы должны загрузить и включить в ваши сценарии и работает на всех современных браузерах:
/* get the time passed from the cookie, if one is set */
var count = parseInt(($.cookie('mytimeout') || 0), 10);
/* set an interval that adds seconds to the count */
var interval = setInterval(function() {
count++;
/* plus, you can do something you want to do every second here,
like display the countdown to the user */
}, 1000);
/* set a timeout that expires 900000 Milliseconds (15 Minutes) -
the already passed time from now */
var timeout = setTimeout(function() {
/* put here what you want to do once the timer epires */
/* clear the Interval */
clearInterval(interval);
}, 900000 - count*1000);
/* before the window is reloaded or closed, store the current timeout in a cookie.
For cookie options visit jquery-cookie */
window.onbeforeunload = function() {
$.cookie('mytimeout', count, { expires: 7, path: '/' });
};
Here's a jsfiddle to see it working
And here's a version with buttons to start and reset
Если вы хотите, чтобы время, чтобы пройти, даже если пользователь не находится на странице, вы можете использовать new Date().getTime()
, чтобы получить пройденные миллисекунды между одним посещением и следующим. Так это изменить:
/* get the last time the user visited the page */
var lastTime = parseInt(($.cookie('timepassed') || new Date().getTime()), 10);
/* add elapsed time to the count. If the count is negative, set it to 0 */
var count = Math.max(parseInt(($.cookie('mytimeout') || 0), 10) + parseInt((new Date().getTime() - lastTime)/1000, 10), 0);
/* set the time passed on unload */
window.onbeforeunload = function() {
$.cookie('mytimeout', count, { expires: 7, path: '/' });
$.cookie('timepassed', new Date().getTime(), { expires: 7, path: '/' });
};
And yet another jsfiddle
Важно: Это не является безопасным, пользователь может манипулировать счетчик, но если вы хотите сделать безопасные сценарии, JS не является правильным инструментом для этого.
UPDATE
A version with hours, minutes and seconds
все, что может прийти на мой взгляд, использовать локальный кэш, чтобы сохранить значение таймера –
Для этого вам нужно будет либо 'localStorage' поддержка или файлы cookie и файлы serveride – drinchev
Если важно, чтобы пользователь не мог обойти закрытие через 15 минут, я бы не сделал это в JS, пользователь может просто манипулировать файлом cookie или localStorage. Вам по-прежнему нужен таймер, чтобы показать оставшееся время, но проверка того, прошло ли время, также должна быть выполнена на стороне сервера. – HMR