4

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

4

3 回答 3

4

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

于 2012-10-04T16:44:18.903 回答
2

A possible workaround would maybe be to use var before = new Date() to store the time before your dialog appears and then use that one to calculate the passed time after your dialog disappears to make up for the missed seconds.

于 2012-10-04T16:50:06.940 回答
1

不,当 UI 线程被另一个任务消耗时,您不能在后台继续更新 UI(在这种情况下,呈现本机模式对话框提示)。

请参阅Javascript 超时 - 规范

于 2012-10-04T16:44:15.203 回答