观察到的情景:
1)关闭浏览器时,会触发beforeunload
事件,但unload
事件未被触发。
2)关闭标签页时,beforeunload
事件和unload
事件都会被触发。
问题:
关闭浏览器时如何触发unload
方法?
代码:
var inFormOrLink = false;
var flag = false;
$(document).ready(function () {
$(window).bind("beforeunload", function () {
return "You are about to close the window";
});
$(window).on("unload", function () {
if (!inFormOrLink)
window.open('../Account/Login?admin=admin', "_blank");
});
});
$(function () {
$("a").click(function () {
if (!flag) {
inFormOrLink = true;
$(window).unbind('beforeunload');
$(window).unbind('unload');
}
else {
// inFormOrLink = false;
$(window).bind('beforeunload');
$(window).bind('unload');
}
});
$(".btn").click(function () {
if (!flag) {
inFormOrLink = true;
$(window).unbind('beforeunload');
$(window).unbind('unload');
}
else {
inFormOrLink = false;
flag = false;
$(window).bind('beforeunload');
$(window).bind('unload');
}
});
$("body").keydown(function (e) {
if (e.which == 116 || e.which == 117) {
inFormOrLink = true;
}
else if (e.ctrlKey && e.keyCode == 82) {
inFormOrLink = true;
}
else if (e.which == 8) {
var tag = e.target.tagName.toLowerCase();
inFormOrLink = true;
if (tag != "input") {
e.preventDefault();
}
}
else {
inFormOrLink = false;
$(window).bind('unload');
}
});
});
'
答案 0 :(得分:0)
onunload
事件理论上应该在您提到的情况下运行,但是,有许多浏览器,每个浏览器都由不同的团队实现。由于您在少数浏览器中发现了一个错误,因此我建议您将事件处理程序附加到beforeunload
而不是unload
。在这种情况下,您可以解决问题。另一种可能性是运行unload
事件,如下所示:
$(window).unload();