3

問題が1つありますjavascript。ブラウザを閉じたときに使用したい機能があります。どうすればそれを検出できa browser is being closedますか?

onunload私は、またはのような解決策を得たことについていくつかの調査を行いましたがbeforeunload、ページをリロードしているときに両方の機能が実行されています。リロードとブラウザ/タブを閉じることを区別できる解決策はありますか?

4

3 に答える 3

4

いいえ、わかりません。HTMLページはブラウザの「所有者」ではなく、情報へのアクセスは制限されており、この情報はその中にありません。

ユーザーがいつページを離れるかはわかりますが、それはあなたの仕事ではないので、理由はわかりません...

于 2013-02-08T06:45:47.933 に答える
2

gdoronは、ユーザーが「ページを離れる」理由/方法を判断できないという点で正しいです。極端な場合は、ブラウザのCLOSEボタンがクリックされたかどうかをマウスダウンイベントで判断し、アラートを発することができます。しかし、これにはおそらく、mousedownイベントのXとYを追跡する必要があり、それは物事を行うための非常に良い方法ではありません。また、タブが閉じているかどうかを正確に判断できるとは思いません。

于 2013-02-08T07:21:33.420 に答える
1

答えは、

</head>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript" language="javascript">

var validNavigation = false;

function endSession() {
// Browser or broswer tab is closed
// Do sth here ...
alert("bye");
}

function wireUpEvents() {
/*
* For a list of events that triggers onbeforeunload on IE
* check http://msdn.microsoft.com/en-us/library/ms536907(VS.85).aspx
*/
window.onbeforeunload = function() {
  if (!validNavigation) {
     endSession();
  }
 }

// 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>    
</head>
<body>
<h1>Eureka!</h1>
  <a href="http://www.google.com">Google</a>
  <a href="http://www.yahoo.com">Yahoo</a>
</body>
</html>
于 2013-08-16T15:27:42.253 に答える