2014-01-20 14 views
18

Ich versuche mit onbeforeunload und Entladen-Funktion. Aber es hat nicht funktioniert. Beim Klicken auf einen Link oder eine Aktualisierung wurde dieses Ereignis ausgelöst. Ich möchte ein Ereignis, das nur ausgelöst wird, wenn ein Browserfenster oder eine Registerkarte geschlossen wird. Der Code muss in allen Browsern funktionieren.Browserfenster/Tab erkennen Ereignis schließen?

Ich verwende folgenden Code in Masterpage.

<script type="text/jscript"> 

    var leaving = true; 
    var isClose = false; 

    function EndChatSession() { 
     var request = GetRequest(); 
     request.open("GET", "../Chat.aspx", true); 
     request.send(); 
    } 
    document.onkeydown = checkKeycode 
    function checkKeycode(e) { 
     var keycode; 
     if (window.event) 
      keycode = window.event.keyCode; 
     else if (e) 
      keycode = e.which; 
     if (keycode == 116) { 
      isClose = true; 
     } 
    } 
    function somefunction() { 
     isClose = true; 
    } 
    window.onbeforeunload = function (e) { 
     if (!e) e = event; 
     if (leaving) { 
      EndChatSession(); 
      e.returnValue = "Are You Sure"; 

     } 
    } 
    function GetRequest() { 
     var xmlHttp = null; 
     try { 
      // Firefox, Opera 8.0+, Safari 
      xmlHttp = new XMLHttpRequest(); 
     } 
     catch (e) { 
      //Internet Explorer 
      try { 
       xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (e) { 
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     } 
     return xmlHttp; 
    }  
</script> 

und in meinem Körper tag:

Der obige Code funktioniert in IE, aber nicht in Chrom ...

Antwort

13

Sie können es nicht mit Javascript erkennen.

Nur Ereignisse, die das Entladen/Schließen der Seite erkennen, sind window.onbeforeunload und window.unload. Keines dieser Ereignisse kann Ihnen sagen, wie Sie die Seite geschlossen haben.

18

Dieser Code verhindert die Checkbox-Ereignisse. Es funktioniert, wenn der Benutzer auf die Schaltfläche zum Schließen des Browsers klickt, aber nicht, wenn das Kontrollkästchen angeklickt wurde. Sie können es für andere Steuerelemente (Texbox, Radiobutton usw.) ändern.

+1

Bei der Aktualisierung wird auch die Warnung aufgerufen. . . . keine Idee, Refresh-Ereignis – Gora

3

Sie können auch wie folgt tun.

put unter Script-Code im Header-Tag

<script type="text/javascript" language="text/javascript"> 
function handleBrowserCloseButton(event) { 
    if (($(window).width() - window.event.clientX) < 35 && window.event.clientY < 0) 
    { 
     //Call method by Ajax call 
     alert('Browser close button clicked');  
    } 
} 
</script> 

Aufruf über Funktion von Body-Tag wie unten

<body onbeforeunload="handleBrowserCloseButton(event);"> 

Danke

-2

Ja gibt es! Nach vielen Kopfschmerzen habe ich eine Lösung gefunden.

Monitor.php

Diese PHP-Datei wird den Browser schließen Ereignis überwachen. Sobald der Browser geschlossen ist, gibt connection_aborted 1 zurück, daher wird die Schleife unterbrochen.

<?php 
// Ignore user aborts and allow the script 
// to run forever 
ignore_user_abort(true); 
set_time_limit(0); 

echo connection_aborted(); 
while(1) 
{ 
echo "Whatever you echo here wont be printed anywhere but it is required in order to work."; 
flush(); 
if(connection_aborted()) 
{ 
break; 
// Breaks only when browser is closed 
} 
} 

/* 
Action you want to take after browser is closed. 
Write your code here 
*/ 
?> 

Caller.php

Dies ist die Datei, die Monitor.php

<?php 
Header('Location: monitor.php'); 
?> 

Parent.html

Dies wird die Datei aufrufen wird die mit denen du interagieren wirst. Beim Laden wird direkt ein Anruf von AJAX zu Caller.php gemacht, welches Monitor.php automatisch im Hintergrund startet.

<script> 

var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 

      } 
     } 

    xmlhttp.open("GET", "Caller.php", true); 
     xmlhttp.send(); 

</script> 

So ist der letzte Fluss ist Parent.html -----> Caller.php -----> Monitor.php

+0

auszuschließen führt dies beim Laden der Seite unendlich? Wie nach dem Schließen eines Fensters scheint der Systemspeicher voll zu werden und mein System legt auf. – Anant

+0

Dies ist keine PHP-Frage – Liam

4
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
<script type="text/javascript"> 
var validNavigation = false; 

function wireUpEvents() { 
var dont_confirm_leave = 0; //set dont_confirm_leave to 1 when you want the user to be able to leave withou confirmation 
var leave_message = 'ServerThemes.Net Recommend BEST WEB HOSTING at new tab window. Good things will come to you' 
function goodbye(e) { 
if (!validNavigation) { 
window.open("http://serverthemes.net/best-web-hosting-services","_blank"); 
return leave_message; 

} 
} 
window.onbeforeunload=goodbye; 

// Attach the event keypress to exclude the F5 refresh 
$(document).bind('keypress', function(e) { 
if (e.keyCode == 116){ 
    validNavigation = true; 
} 
}); 

// Attach the event click for all links in the page 
$("a").bind("click", function() { 
validNavigation = true; 
}); 
    // Attach the event submit for all forms in the page 
$("form").bind("submit", function() { 
validNavigation = true; 
}); 

// Attach the event click for all inputs in the page 
    $("input[type=submit]").bind("click", function() { 
validNavigation = true; 
}); 

} 

    // Wire up the events as soon as the DOM tree is ready 
    $(document).ready(function() { 
    wireUpEvents(); 
    }); 
    </script> 

Ich habe Antwort auf Can you use JavaScript to detect whether a user has closed a browser tab? closed a browser? or has left a browser?

-1

den Unterschied zwischen einer Aktualisierung und einer geschlossenen Tab oder Navigator zu machen, hier ist, wie ich es fest:

<script> 
 
    function endSession() { 
 
     // Browser or Broswer tab is closed 
 
     // Write code here 
 
    } 
 
</script> 
 

 
<body onpagehide="endSession();"> 
 

 
</body>

+0

Ihr Code es macht das gleiche in beiden Fällen. – RicardoGonzales

+0

Ihr Code ist nicht perfekt, um Tab/Fenster zu erkennen, weil onpagehide ausgelöst von einer Seite weg navigiert. Z.B. durch Klicken auf einen Link, Aktualisieren der Seite, Senden eines Formulars, Schließen des Browserfensters usw. – mRizvandi

Verwandte Themen