防止onbeforeunload函数暂停javascript计时器

时间:2012-10-04 16:40:48

标签: javascript javascript-events settimeout onbeforeunload

在我的网页上,我有一个使用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()功能。有关如何防止这种情况的任何想法吗?

3 个答案:

答案 0 :(得分:4)

你做不到。 Javascript是严格单线程的,因此任何模态弹出窗口都会暂停其他所有内容。

答案 1 :(得分:2)

可能的解决方法可能是使用var before = new Date()存储对话框出现之前的时间,然后使用该对话框计算对话框消失后的传递时间以弥补错过的秒数。

答案 2 :(得分:1)

不,当UI线程与其他任务一起使用时(在这种情况下,呈现该本机模式对话框提示),您无法在后台更新UI。

请参阅Javascript timeout - specification