2010-09-03 6 views
0

J'ai écrit une fonction Jquery qui noircit l'écran après une certaine période d'inactivité, crée une fenêtre contextuelle qui permet à l'utilisateur de cliquer sur un bouton pour rester connecté et les déconnecte (en fermant la fenêtre de l'application) s'ils ne répondent pas à temps.Redémarrage du code Jquery après la première extension de l'utilisateur

L'environnement est ASP.NET (VB). Nous n'utilisons pas techniquement de pages maîtres, mais nous avons une page parent dans laquelle résident notre en-tête, pied de page et nav, et mon code Jquery est appelé depuis cette fenêtre, chargé via un IFrame.

J'ai une fonction dans la fenêtre enfant qui signale l'activité (actuellement keydown, mousedown et flou) à la fenêtre parente, et réinitialise la minuterie. Mon code semble fonctionner correctement, sauf dans un scénario. Si l'utilisateur est invité avec l'avertissement de dépassement de délai, puis qu'il clique sur le bouton pour continuer sa session, s'il n'effectue aucune action sur la page (clic de souris, clavier, etc.), le code de timeout ne s'exécute pas une deuxième fois.

Voici ma fonction principale jquery:

function pop_init() { 
    // show modal div 
    $("html").css("overflow", "hidden"); 
    $("body").append("<div id='popup_overlay'></div><div id='popup_window'></div>"); 
    //$("#popup_overlay").click(popup_remove); // removed to make sure user clicks button to continue session. 
    $("#popup_overlay").addClass("popup_overlayBG"); 
    $("#popup_overlay").fadeIn("slow"); 

    // build warning box 
    $("#popup_window").append("<h1>Warning!!!</h1>"); 
    $("#popup_window").append("<p id='popup_message'><center>Your session is about to expire. Please click the button below to continue working without losing your session.</center></p>"); 
    $("#popup_window").append("<div class='buttons'><center><button id='continue' class='positive' type='submit'><img src='images/green-checkmark.png' alt=''/> Continue Working</button></center></div>"); 

    // attach action to button 
    $("#continue").click(session_refresh); 

    // display warning window 
    popup_position(400, 300); 
    $("#popup_window").css({ display: "block" }); //for safari using css instead of show 
    $("#continue").focus(); 
    $("#continue").blur(); 

    // set pop-up timeout 
    SESSION_ALIVE = false; 
    window.setTimeout(popup_expired, WARNING_TIME); 
} 

Voici le code de la fenêtre parent:

<script language="javascript" type="text/javascript"> 
      var timer = false; 
      window.reportChildActivity = function() { 
       if (timer !== false) { 
        clearTimeout(timer); 
       } 
       //SESSION_ALIVE = true; 
       timer = window.setTimeout(pop_init, SESSION_TIME); 
      } 
    </script> 

Voici le code de la fenêtre enfant:

<script type="text/javascript"> 
    $(document).ready(function() { 
     window.parent.reportChildActivity(); 
    }); 
</script> 
<script type="text/javascript"> 
    $(document).bind("mousedown keydown blur", function() {   
      window.parent.reportChildActivity(); 
    }); 

Le dernier script s'exécute dans un fichier (fichier VB.NET ascx) qui construit les options d'en-tête/menu pour chaque page de notre système.

La dernière ligne de la fonction pop_init devrait clairement redémarrer le temporisateur, mais pour une raison quelconque, cela ne semble pas fonctionner.

Merci pour toute aide et information que vous pourriez avoir.

oublié d'ajouter mon code pour la fonction session_refresh:

function session_refresh() { 
    SESSION_ALIVE = true; 
    $(".buttons").hide(); 
    $("#popup_message").html("<center><br />Thank you! You may now resume using the system.<br /></center>"); 
    window.setTimeout(popup_remove, 1000); 
    $("#popup_window").fadeOut("slow", function() { $('#popup_window,#popup_overlay').trigger("unload").unbind().remove(); }); 
    var timer = false; 
    window.reportChildActivity = function() { 
     if (timer !== false) { 
      clearTimeout(timer); 
     } 
     timer = window.setTimeout(pop_init, SESSION_TIME); 
    } 
} 

Répondre

0

Vous devez redémarrer votre minuterie après que l'utilisateur clique sur le bouton.

+0

Bien sûr, désolé, j'ai juste oublié d'inclure ce morceau de code, mais je l'ai ajouté maintenant en bas. Comme vous pouvez le voir, la dernière ligne de la fonction session_refresh redémarre le temporisateur. – Mike

0

Eh bien, il me semble avoir résolu le problème en changeant ceci:

var timer = false; 
    window.reportChildActivity = function() { 
     if (timer !== false) { 
      clearTimeout(timer); 
     } 
     timer = window.setTimeout(pop_init, SESSION_TIME); 
    } 

à ceci:

if (timer !== false) { 
      clearTimeout(timer); 
     } 
     timer = window.setTimeout(pop_init, SESSION_TIME); 

Je n'ai pas besoin de re déclare la fonction reportChildActivity comme j'étais.

Questions connexes