2

我编写了代码以在用户空闲时使用甜蜜的警报弹出窗口显示倒数计时器(使用 ng-idle 库)。倒计时为 0 后,用户将自动注销。为了减少倒数计时器,我正在使用 setInterval 函数(这是导致问题的原因)。

       var 
       closeInSeconds = Idle.getTimeout(), //this will fetch the auto logout time. In my case it is 20 seconds
       displayText = "Your session is about to expire in #1 seconds, Do you want to reset the session?",
       timer;

        timer = setInterval(function() {
            closeInSeconds--;
            if (closeInSeconds <= 0) {
                clearInterval(timer);
            }
            $('.sweet-alert > p').text(displayText.replace(/#1/, closeInSeconds));
        }, 1000);

        swal({
        title: "Alert",
        text: displayText.replace(/#1/, closeInSeconds),
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DDDDD",
        confirmButtonText:  "RESET",
        cancelButtonText: "NO"
        },

当浏览器选项卡处于活动状态或用户空闲但仍在选项卡上时,上面的代码工作得非常好。当浏览器选项卡最小化并且屏幕上出现空闲警告弹出窗口时,会出现特殊问题。当我最小化窗口并返回时,计时器似乎显示了错误的值。在弹出窗口中,有时会显示您有 10 秒的时间退出,但实际上它会在接下来的 2-3 秒内退出。这意味着 setInterval 函数存在一些问题,这就是为什么当窗口最小化时它没有显示确切的倒计时值。自动注销功能由 ng-idle 库的 IdleTimeout 函数处理,该函数正常工作并在 20 秒结束时注销用户,而在弹出窗口中仍显示剩余时间。

4

0 回答 0