2013-03-25 58 views
0

我有一個文件「1.HTML」與加載「2.HTML」clearTimeout()不工作

在兩個HTML的iframe我有這樣的代碼:

window.onload=function(){ 
    window.top.sesion_timer = setTimeout(function(){ 
     window.top.f_cerrar_sesion(); 
    },2000); 
    //si tocas tecla o clickeas reseteas contador 
    window.addEventListener('keydown',function(){ window.top.f_reset_sesion(); },false); 
    window.addEventListener('click',function(){  window.top.f_reset_sesion(); },false); 
} 

在父文件我也有這樣的代碼:

var sesion_timer; 
function f_reset_sesion(){ 
    clearTimeout(sesion_timer); 
    sesion_timer=setTimeout(f_cerrar_sesion,2000); 

} 
function f_cerrar_sesion(){ 
    alert("cerrar"); 
} 

當我點擊文檔或IFRAME超時重裝但interva我沒有清除,所以最後函數f_cerrar_sesion被稱爲,這是不會發生的事情

+1

就在這裏注意:不要使用警報來進行這種調試。這是一種阻止方法,所以在警報等待響應時不會有其他執行。使用'console.log()'並打開你的JavaScript控制檯。我不是100%確定這個攔截提醒對您的計時器有什麼影響。 – Lix 2013-03-25 11:17:06

+0

我認爲你應該使用'window.parent'而不是'window.top' – 2013-03-25 11:20:00

+0

是的,我這樣做,但事情是,我已經覆蓋了項目中的警報功能 – jsertx 2013-03-25 11:20:42

回答

0

我終於找到了問題。

我先來檢查,如果該文件是絕對父文檔添加超時,其他的方式它將每個iframe中添加一個超時的話,最終的代碼將是這樣的:

window.onload=function(){ 
    //start the timeout if is the absolute parent 
    if(window.top===window.self) { 
     window.top.sesion_timer = window.top.setTimeout(function(){ window.top.f_cerrar_sesion(); },1200000); 
    } 
    //if keydown or click we reset the timeout calling f_reset_sesion(), where the timeout is 
    window.addEventListener('keydown',function(){ window.top.f_reset_sesion(); },false); 
    window.addEventListener('click',function(){  window.top.f_reset_sesion(); },false); 
}