0

「2.html 」をロードするiframeを含むドキュメント「1.html」があります

両方のhtmlで、次のコードがあります:

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 をクリックすると、タイムアウトがリロードされますが、間隔がクリアされないため、最終的に関数 f_cerrar_session が呼び出されます。

4

1 に答える 1

0

私はついに問題を見つけました。

ドキュメントがタイムアウトを追加する絶対親ドキュメントであるかどうかを最初に確認する必要があります。他の方法では、iframeごとに1つのタイムアウトが追加されるため、最終的なコードは次のようになります。

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);
}
于 2013-03-27T12:53:12.953 に答える