Potrzebna będzie obsługa ciastek stąd:
http://www.quirksmode.org/js/cookies.htmlI skrypt. Wygląda to tak że co sekundę jest zapisywane ciastko z aktualnym licznikiem. Po refreshu przy inicjacji licznika sprawdzana jest obecność ciastek, jeśli istnieje to stan licznika jest odczytywany z ciastka i użyty do inicjacji licznika.
Jeśli ciastek nie ma to licznik startuje z domyślnymi wartościami.
Przycisk usuń ciacha zeruje wszystko.
Licznik jest zapamiętywany i po opuszczeniu strony nie idzie dalej. Aby licznik działał po opuszczeniu strony trzeba by zapamiętywać jeszcze czas i przy odczycie pobierać aktualny czas, wyliczać rożnicę w czasie i tą różnicę odejmować od licznika

Wygląda to prosto ale takie nie jest

<script type="text/javascript">
var IdNo = 0;
//cookie
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
//time
function time (hours,mins,secs,span) {
this.id = "time" + IdNo++;
window[this.id] = this;
this.hours = hours;
this.mins = mins;
this.secs = secs;
this.span = span;
this.show = show;
}
function show() {
createCookie('czas',this.hours+":"+this.mins+":"+this.secs);
if( this.secs > 0 ) {
this.secs--;
} else if( this.secs == 0 && this.mins > 0 ) {
this.mins--;
this.secs=59;
} else if ( this.secs == 0 && this.mins == 0 && this.hours > 0 ) {
this.hours--;
this.mins=59;
this.secs=59;
}
if( this.hours == 0 && this.mins == 0 && this.secs == 0 ) {
alert("Koniec czasu");
} else {
document.getElementById( this.span ).innerHTML = "Time left: " +
(( this.hours < 10 ) ? ( "0" + this.hours ) : this.hours) + ":" +
(( this.mins < 10 ) ? ( "0" + this.mins ) : this.mins) + ":" +
(( this.secs < 10 ) ? ( "0" + this.secs ) : this.secs);
}
setTimeout("window."+this.id+".show()",1000);
}
function load() {
var cookie_czas = readCookie('czas');
if (cookie_czas) {
var out_czas = cookie_czas.split(":");
hours = parseInt(out_czas[0]);
mins = parseInt(out_czas[1]);
secs = parseInt(out_czas[2]);
var timer = new time(hours,mins,secs,"tm");
} else {
var timer = new time(20,0,0,"tm");
}
timer.show();
}
function erase() {
eraseCookie("czas");
eraseCookie("data");
document.location.href = document.location.href;
}