Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript检测浏览器选项卡刷新或关闭_Javascript_Jquery_Html - Fatal编程技术网

如何使用javascript检测浏览器选项卡刷新或关闭

如何使用javascript检测浏览器选项卡刷新或关闭,javascript,jquery,html,Javascript,Jquery,Html,我有一个问题,我有一个javascript函数,我想在浏览器关闭时使用它,我如何检测浏览器正在关闭 我对我得到的解决方案做了一些研究,比如onunload或beforeunload,但这两个功能都是在我重新加载页面时执行的,是否有任何解决方案可以区分重新加载和浏览器/选项卡关闭。不,你不知道,HTML页面不是浏览器的“所有者”,您只能访问有限的信息,而这些信息不在其中 你可以知道用户何时离开你的页面,但你不知道为什么,因为这与你无关……gdoron是正确的,因为你无法确定用户“离开页面”的原因/

我有一个问题,我有一个
javascript
函数,我想在浏览器关闭时使用它,我如何检测
浏览器正在关闭


我对我得到的解决方案做了一些研究,比如
onunload
beforeunload
,但这两个功能都是在我重新加载页面时执行的,是否有任何解决方案可以区分重新加载和浏览器/选项卡关闭。

不,你不知道,HTML页面不是浏览器的“所有者”,您只能访问有限的信息,而这些信息不在其中


你可以知道用户何时离开你的页面,但你不知道为什么,因为这与你无关……

gdoron是正确的,因为你无法确定用户“离开页面”的原因/方式。 在极端情况下,您可能可以确定是否单击了浏览器的关闭按钮并发出警报。 但这可能需要跟踪mousedown事件的X和Y,这不是一种很好的方法。我认为您无法准确确定某个选项卡是否已关闭。

答案是

</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>

var validNavigation=错误;
函数endSession(){
//浏览器或浏览器选项卡已关闭
//在这里做某事。。。
警惕(“再见”);
}
函数wireUpEvents(){
/*
*获取在IE上卸载之前触发onbeforeunload的事件列表
*检查http://msdn.microsoft.com/en-us/library/ms536907(第85节)
*/
window.onbeforeunload=函数(){
如果(!有效航行){
endSession();
}
}
//附加事件按键以排除F5刷新
$(文档).bind('keypress',函数(e){
如果(e.keyCode==116){
有效航行=真;
}
});
//单击页面中的所有链接附加事件
$(“a”).bind(“单击”,函数(){
有效航行=真;
});
//为页面中的所有表单附上事件提交
$(“表单”).bind(“提交”,函数(){
有效航行=真;
});
//为页面中的所有输入附加事件单击
$(“输入[type=submit]”)。绑定(“单击”,函数(){
有效航行=真;
});
}
//DOM树准备就绪后,立即连接事件
$(文档).ready(函数(){
wireUpEvents();
}); 
尤里卡!

AFAIK你无法区分这些。也许如果你解释一下浏览器关闭时你的函数会做什么,那么有人可以提供一个更好的替代解决方案?实际上,我有一个javascript函数,当用户单击注销操作时会调用它,该操作会在用户注销后从数据库中删除一些行,我想在用户关闭浏览器时调用相同的函数。如果用户登录我们的日志,您希望从数据库中删除此行中的哪些数据?通常,用户只需添加记录或修改现有记录即可跟踪网站上的用户活动。此行包括特定用户的活动。那么,当浏览器选项卡关闭时,我如何加载某些功能?@lord_linus,加载什么?浏览器选项卡已关闭?!我有一个从数据库中删除一些行的函数(我正在使用ajax将其转换为javascript函数),当用户注销或关闭数据库时,我希望执行该函数browser@lord_linus您需要每X次ping一次浏览器,如果服务器没有收到ping的次数是2倍,请执行您想要的操作。我看不到其他选择。顺便说一句,它既丑陋又昂贵,也没有其他选择。这里不是教程网站,请尝试自己搜索,如果搜索不到,请提出一个新问题。如果用户通过单击刷新图标刷新浏览器选项卡会怎么样?实际上无法解决原始问题,因为它无法区分关闭窗口和重新加载窗口,虽然是勇敢的努力。