admin管理员组文章数量:1305031
I have an issue with the following code. What happens is when a user closes their browser, it should prompt them to either click OK or click CANCEL to leave the page. Clicking OK would trigger a window.location
to redirect to another page for user tracking (and yes, to avoid flame wars, there is a secondary system in place to assure accurate tracking, in the event of the user killing the browser from the task manager (as mentioned in similar questions)). CANCEL would remain on the page, the issue being that no matter what button you hit, you get redirected as if you wanted to leave the page. The relevant code is below.
window.onbeforeunload = confirmExit;
function confirmExit()
{
var where_to = confirm("Click OK to exit, Click CANCEL to stay.");
if (where_to == true)
{
window.location="logout.php";
}
if (where_to == false){
alert("Returning...");
}
}
I have an issue with the following code. What happens is when a user closes their browser, it should prompt them to either click OK or click CANCEL to leave the page. Clicking OK would trigger a window.location
to redirect to another page for user tracking (and yes, to avoid flame wars, there is a secondary system in place to assure accurate tracking, in the event of the user killing the browser from the task manager (as mentioned in similar questions)). CANCEL would remain on the page, the issue being that no matter what button you hit, you get redirected as if you wanted to leave the page. The relevant code is below.
window.onbeforeunload = confirmExit;
function confirmExit()
{
var where_to = confirm("Click OK to exit, Click CANCEL to stay.");
if (where_to == true)
{
window.location="logout.php";
}
if (where_to == false){
alert("Returning...");
}
}
Share
Improve this question
edited Feb 17, 2020 at 8:30
Brian Tompsett - 汤莱恩
5,89372 gold badges61 silver badges133 bronze badges
asked Jun 17, 2010 at 0:25
NikNik
2,4843 gold badges18 silver badges16 bronze badges
3 Answers
Reset to default 6The onbeforeunload
doesn't work that way. The associated function should return a string which is in turn to be displayed on the default onbeforeunload
dialog.
function confirmExit() {
return "This message will appear in the dialog.";
}
But you aren't returning anything and taking it in your own hands with a confirm()
. When the function doesn't return anything, then the onbeforeunload
dialog won't be displayed at all.
To invoke the real logout, you'd like to use the onunload
event. Here's a rewrite:
window.onbeforeunload = confirmExit;
window.onunload = logout;
function confirmExit() {
return "Click OK to exit, Click CANCEL to stay.";
}
function logout() {
window.location = 'logout.php';
}
You're however dependent on the webbrowser whether the last will actually hit the server. Most if not all of the webbrowsers don't. I'd rather fire an ajaxical request on that URL, but you're dependent on the webbrowser as well whether it will work flawlessly.
Perhaps instead of hijacking the user's browser you could fire an XHR request from inside your unbeforeunload() and get the data you need sent over to where you need it?
Without more of the use-case it's hard to tell, but this may provide a nice alternative.
Tested in IE9 and Chrome
function addEvent(elm, evType, fn, useCapture) {
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);
return true;
}
else if (elm.attachEvent) {
var r = elm.attachEvent('on' + evType, fn);
return r;
}
else {
elm['on' + evType] = fn;
}
}
function exitAlert(e) {
var msg = "This message will appear in the dialog.";
if (!e) { e = window.event; }
if (e) { e.returnValue = msg; }
return msg;
}
addEvent(window, 'beforeunload', exitAlert, false);
本文标签: dom eventsJavascript onbeforeunload IssueStack Overflow
版权声明:本文标题:dom events - Javascript onbeforeunload Issue - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741794934a2397883.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论