2013-02-08 91 views
2

我有一個問題,我有一個javascript功能,我想在瀏覽器關閉時使用,我如何檢測a browser is being closed我如何檢測瀏覽器選項卡刷新或關閉使用javascript

我已經取得了一些研究,我得到了解決辦法像onunloadbeforeunload但是當我重新加載頁面正在執行兩種功能,有沒有辦法,我能區分重載和瀏覽器/標籤關閉任何解決方案。

+3

AFAIK你不能區分這些。 – alex

+0

也許如果你解釋當瀏覽器關閉時你的功能會做什麼,那麼有人可以提供一個更好的替代解決方案? – ddtpoison777

+0

實際上我有一個javascript函數,當用戶點擊註銷操作後,在用戶註銷後從數據庫中刪除了一些行,我想在用戶關閉瀏覽器時調用相同的函數。 –

回答

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> 
+6

如果用戶點擊刷新圖標刷新瀏覽器選項卡會怎麼樣? – Vardan

+1

實際上並沒有解決原始問題,因爲它不會區分關閉窗口和重新加載窗口,儘管這是一次勇敢的努力。 – macguru2000

4

不,你不知道,HTML頁面不是瀏覽器的「所有者」,你只有有限的信息訪問權限,而且這些信息不在其中。

用戶離開你的頁面時,可以知道,但你可以不知道爲什麼,因爲這不關你的...

+0

然後當瀏覽器選項卡關閉時如何加載一些功能? –

+0

@lord_linus,加載什麼?瀏覽器選項卡已關閉...?! – gdoron

+0

我有一個函數可以從數據庫中刪除一些行(我正在使用這個函數來使用ajax的javascript函數),當用戶註銷或者關閉瀏覽器時,我想執行這個函數。 –

2

gdoron是正確的,你不能確定用戶爲什麼/怎麼樣了離開頁面'。 在極端情況下,如果瀏覽器的CLOSE按鈕被點擊並讓警報觸發,您可以確定mousedown事件。 但是,這可能需要跟蹤mousedown事件的X和Y,這不是一個很好的做事方式。我不認爲你能夠準確地確定一個標籤是否關閉。

相關問題