【发布时间】:2012-07-12 14:12:09
【问题描述】:
使用下面的函数可以检测出用户有哪个按钮 按下刷新按钮还是关闭按钮?如果没有,还有其他方法吗?
$(window).bind('beforeunload', function(event) {
return 'pls save ur work';
});
【问题讨论】:
标签: javascript html
使用下面的函数可以检测出用户有哪个按钮 按下刷新按钮还是关闭按钮?如果没有,还有其他方法吗?
$(window).bind('beforeunload', function(event) {
return 'pls save ur work';
});
【问题讨论】:
标签: javascript html
简单的答案是否定的 - 浏览器的安全模型不允许您明确检测用户选择以何种方式离开您的页面(刷新/关闭/内部链接/外部链接)。
detect refresh browser for unload/beforeunload when browser closed
可以 - 使用 cookie - 检查用户何时加载您的页面,是否他们之前在同一会话中访问过该网站 - 例如。检测它们是否已刷新 - 但不是在它们刷新之前:
Detect Browser Refresh in Javascript
Check if page gets reloaded or refreshed in Javascript
一种部分且不完善的方法是在页面卸载之前检测他们是否按下了“F5”或“Ctrl+R”或“Cmd+R”(用于刷新的键盘快捷键)。这将检测到一些刷新,但不会检测到用户实际单击刷新按钮的位置。
(function($) {
var refreshKeyPressed = false;
var modifierPressed = false;
var f5key = 116;
var rkey = 82;
var modkey = [17, 224, 91, 93];
// Check for refresh keys
$(document).bind(
'keydown',
function(evt) {
// Check for refresh
if (evt.which == f5key || window.modifierPressed && evt.which == rkey) {
refreshKeyPressed = true;
}
// Check for modifier
if (modkey.indexOf(evt.which) >= 0) {
modifierPressed = true;
}
}
);
// Check for refresh keys
$(document).bind(
'keyup',
function(evt) {
// Check undo keys
if (evt.which == f5key || evt.which == rkey) {
refreshKeyPressed = false;
}
// Check for modifier
if (modkey.indexOf(evt.which) >= 0) {
modifierPressed = false;
}
}
);
$(window).bind('beforeunload', function(event) {
var message = "not refreshed";
if (refreshKeyPressed) {
message = "refreshed";
}
event.returnValue = message;
return message;
});
}(jQuery));
您还可以检测点击链接时链接的目标是否在同一个站点上: How can I detect when the user is leaving my site, not just going to a different page?
【讨论】: