【发布时间】:2012-10-04 16:40:48
【问题描述】:
在我的网页中,我有一个使用 Javascript 的 setTimeout() 的倒数计时器。
function Tick() {
if (RemainingSeconds <= 0) {
alert("Time is up.");
return;
}
RemainingSeconds -= 1;
ElapsedSeconds += 1;
UpdateTimerDisplay();
window.setTimeout("Tick()", 1000);
}
我还在onbeforeunload 上触发了一个功能,以“防止”用户离开页面。
window.onbeforeunload = function () {
if (!isIEAjaxRequest) {
return "You should use the logout button to leave this page!";
}
else {
isIEAjaxRequest = false;
}
};
问题是当“你确定要离开这个页面吗?”窗口提示,它会暂停setTimeout() 函数。关于如何防止这种情况的任何想法?
【问题讨论】:
-
与问题无关,应将代码写为
window.setTimeout(Tick, 1000);。将函数名放在字符串中只会让引擎解析 JavaScript。 -
我一直在考虑一种方法,您的 beforeunload 处理程序触发事件然后返回 false,因此取消卸载。然后事件的处理程序会弹出一个对话框,询问您是否要离开,如果您说是则卸载。我不确定的是您是否可以在最初触发卸载时找出用户想要做什么(关闭窗口,导航到另一个页面等)。 IWBNI 处理程序收到带有此信息的参数。
-
No Barmar,出于安全原因,这是不可能的。如果您可以阻止用户关闭网页,那么您可以确定所有那些烦人的弹出窗口都会使用它! ;)
标签: javascript settimeout dom-events onbeforeunload