参考各种文章并进行了一些试验和错误,最终开发了这个想法,它对我来说非常完美,就像我希望它发生的方式一样。逻辑也很简单,它实现了这个想法是检测关闭浏览器触发的卸载事件。在这种情况下,鼠标将离开窗口,指向关闭('X')按钮。
$(window).on('mouseover', (function () {
window.onbeforeunload = null;
}));
$(window).on('mouseout', (function () {
window.onbeforeunload = ConfirmLeave;
}));
function ConfirmLeave() {
return "";
}
//Edit start
var prevKey=""
$(document).keydown(function (e) {
if (e.key=="F5") {
window.onbeforeunload = ConfirmLeave;
}
else if (e.key.toUpperCase() == "W" && prevKey == "CONTROL") {
window.onbeforeunload = ConfirmLeave;
}
else if (e.key.toUpperCase() == "R" && prevKey == "CONTROL") {
window.onbeforeunload = ConfirmLeave;
}
else if (e.key.toUpperCase() == "F4" && (prevKey == "ALT" || prevKey == "CONTROL")) {
window.onbeforeunload = ConfirmLeave;
}
prevKey = e.key.toUpperCase();
//Edit End
ConfirmLeave 函数将给出弹出的默认消息,如果需要自定义消息,则返回要显示的文本而不是空字符串。
请注意,在某些版本的 chrome 中,e.key 返回 undefined,因此最好使用 e.keyCode 作为键值并参考http://www.cambiaresearch.com/articles/15/javascript-char-codes-key -值的代码