繁体   English   中英

防止 onbeforeunload 函数暂停 Javascript 计时器

[英]Prevent onbeforeunload function from pausing Javascript timer

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

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

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

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

请参阅Javascript 超时 - 规范

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM