2010-11-24 6 views
1

Bonjour Seniors (Comme je suis nouveau sur les applications Web), Je tenais à mettre en œuvre ou à attraper l'événement de fermeture du navigateur. Oui! Je l'ai fait et mis en œuvre avec succès en utilisant javascript {voir le code ci-dessous} mais je l'ai mis en œuvre dans une page Web sans MasterPage. Maintenant, comme j'essaie de l'implémenter dans une page Web avec MASTERPAGE mais dans chaque post-retour ... l'événement window.onunload est intercepté, ce qui me pose des problèmes ... Y at-il une technique ou une logique pour détecter si je peut faire la différence entre un bouton Fermer le navigateur et l'événement de retour d'une page.Attraper un événement de fermeture du navigateur

S'il vous plaît me guider ... comme je dois mettre en œuvre dans un projet le plus tôt possible .... merci.

Ankit Srivastava

<script type="text/javascript"> 

     function callAjax(webUrl, queryString) 
     { 
      var xmlHttpObject = null; 

       try 
       { 
         // Firefox, Opera 8.0+, Safari... 

         xmlHttpObject = new XMLHttpRequest(); 
        } 
       catch(ex) 
       { 
         // Internet Explorer... 

       try 
        { 
         xmlHttpObject = new ActiveXObject('Msxml2.XMLHTTP'); 
        } 
       catch(ex) 
       { 
        xmlHttpObject = new ActiveXObject('Microsoft.XMLHTTP'); 
       } 
      } 

      if (xmlHttpObject == null) 
       { 
       window.alert('AJAX is not available in this browser'); 
       return; 
       } 

     xmlHttpObject.open("GET", webUrl + queryString, false); 
     xmlHttpObject.send(); 

     return xmlText; 
} 

</script> 

<script type="text/javascript"> 

var g_isPostBack = false; 

window.onbeforeunload = check() 
function check() 
{ 
if (g_isPostBack == true) 
    return; 

var closeMessage = 
    'You are exiting this page.\n' + 
    'If you have made changes without saving, your changes will be lost.\n' + 
    'Are you sure that you want to exit?'; 

if (window.event) 
{ 
    // IE only... 

    window.event.returnValue = closeMessage; 
} 
else 
{ 
    // Other browsers... 

    return closeMessage; 
} 

g_isPostBack = false; 
} 
window.onunload = function() 
{ 
if (g_isPostBack == true) 
    return; 

var webUrl = 'LogOff.aspx'; 
var queryString = '?LogoffDatabase=Y&UserID=' + '<%# Session["loginId"] %>'; 
var returnCode = callAjax(webUrl, queryString); 

} 

</script> 
+0

Regardez dans jquery. Vous faites beaucoup de travail inutile. – Chris

+0

Regardez cette [réponse] (http://stackoverflow.com/questions/1824421/detect-browser-close-on-asp-net/1824486#1824486). –

Répondre

3

Il n'y a aucun événement javascript qui différencie entre un navigateur est fermé et l'utilisateur de naviguer vers une autre page (soit par l'arrière/bouton vers l'avant, ou en cliquant sur un lien, ou tout autre type de navigation méthode). Vous pouvez seulement dire quand la page courante est déchargée. Cela dit, je ne sais pas pourquoi vous auriez même besoin de connaître la différence? Ça me semble un problème XY.

+0

... et même s'il y en avait, il ne capturera pas la fermeture du navigateur car il s'est écrasé, ou si la connexion réseau a été perdue, ou une coupure de courant ferme l'ordinateur, etc. – Quentin

0

La réponse se trouve sur le SO: How to capture the browser window close event?

jQuery(window).bind("beforeunload", function(){return confirm("Do you really want to close?") }) 

et empêcher de confirmer le fait valoir:

jQuery('form').submit(function() { 
    jQuery(window).unbind("beforeunload"); 
    ... 
}); 
+0

Notez que Opera ne prend pas en charge standard 'onbeforeunload' et' onunload'. –

0

Première étape: ajouter une variable JavaScript globale appelée "_buttonClicked" qui est initialement défini sur false.

Deuxième étape: chaque clic sur un bouton assigne la valeur _buttonClicked à true .. avec jQuery c'est une ligne, le JavaScript pur est aussi quelques lignes seulement.

Troisième étape: dans votre fonction, cochez _buttonClicked et, si elle est vraie, ne faites rien.

EDIT: Après avoir regardé rapidement votre code, je vois que vous avez déjà les étapes 1 et 3, donc tout ce dont vous avez besoin est la deuxième étape, assignez g_isPostBack comme vrai quand un bouton de soumission est cliqué. Faites-moi savoir si vous avez besoin d'aide pour implémenter le code et si vous pouvez avoir jQuery.

0

Si vous voulez vous déconnecter Lorsque le navigateur est fermé (en cliquant sur la croix), nous pouvons prendre l'aide des événements de la fenêtre. Deux événements seront utiles: onunload et onbeforeunload. Mais le problème se pose que le code fonctionnera également si vous naviguez d'une page à l'autre ainsi que lorsqu'un actualise la page. Nous ne voulons pas que nos sessions soient claires et que nous insérions l'enregistrement de la déconnexion en cours de rafraîchissement. Donc la solution est si nous distinguons la différence entre la fermeture et le rafraîchissement ou la navigation. J'obtenu la solution:

  1. 'Write onbeforeunload = "emport();"' au sein de la balise body à la page principale.

  2. Ajoutez la fonction suivante à l'intérieur de script dans la section de la tête de la page principale: -

    { si emport() Fonction

    ((de window.event.clientX < 0) || (Window.event.clientY < 0)) {
    // appelant le code derrière la méthode pour insérer le journal sur la base de données dans }}

Et son fait. Il fonctionne pour IE, s'il vous plaît vérifier pour les autres navigateurs. De même, vous pouvez détecter l'événement si la fenêtre est fermée en appuyant sur la combinaison de touches ALT + F4.

0

window.unload se déclenche lorsque nous naviguons d'une page à l'autre ainsi que lorsque nous cliquons sur le bouton de fermeture de notre navigateur, donc pour détecter seulement le bouton de fermeture du navigateur, vous devez utiliser le drapeau.

var inFormOrLink; 

$("a,:button,:submit").click(function() { inFormOrLink = true; }); 

$(":text").keydown(function (e) {  

    if (e.keyCode == 13) { 
     inFormOrLink = true; 
    } 
})/// Sometime we submit form on pressing enter 
$(window).bind("unload", function() { 
    if (!inFormOrLink) { 

     $.ajax({ 
      type: 'POST', 
      async: false, 
      url: '/Account/Update/' 

     }); 
    } 
}) 
Questions connexes