当 ipad 锁定时,Ext.TaskManager.newTask() 不起作用

问题描述 投票:0回答:1

我正在尝试运行一项任务,提示用户是否想在浏览器中扩展会话。

该提示在桌面上正常工作,但在 iPad 锁定时失败。

代码的编写方式是我有任务 A,它应该根据某些条件运行另一个任务 B。

            var uiCheckTime = null;
            var uiPromptMsg = false;
            var initialPopUpTime= null;
            var  sessionAboutToTimeoutMessageBox = Ext.create('view.osMessageBox', {
            title: ''
            });

            var promptMsg = function () {            
            initialPopUpTime = Ext.Date.now();
            task.start();
            var countdownMinutes =  Math.floor((sessionTimeOutCountDown)/(60));
            var countdownSeconds = sessionTimeOutCountDown - (countdownMinutes * 60) + ' second(s)';
            if(countdownMinutes == 0){
                //if number of minutes equals to zero, do not display minutes part.
                countdownMinutes = '';
            }
            else
            {
                countdownMinutes = countdownMinutes + ' minute(s) and ';
            }
            return Ext.String.format(timeoutConfirmationtMessage, countdownMinutes, countdownSeconds);
        };

            Ext.Ajax.on('requestcomplete', function (conn, response, options) {
            
            APPUTILS.ajaxResponseFilter(conn, response, options);
            
            resetTimeout();
            
            var date = new Date();
            
            var currentTime = date.getTime();
            uiCheckTime = Ext.Date.now();
            uiPromptMsg = false;
            sessionAboutToTimeoutPromptTask.start();
             
        });

        //Prompt to inform that Http Session is about to Timeout
        var sessionAboutToTimeoutPromptTask =Ext.TaskManager.newTask( {
            run: function(){                
                if(Ext.Date.now()>=uiCheckTime+(uiSessionExpiryPromptIntervalInMin*60*1000) && !uiPromptMsg)
                {
                    
                    uiPromptMsg = true;
                    sessionAboutToTimeoutMessageBox.show({
                    message : promptMsg(),
                    buttons : Ext.Msg.YES,
                    buttonText : {
                        yes : "<span osviewid = 'OS_USER_SESSION_EXTEND_YES'>Yes</span>"
                    },
                    fn : function(btn, text) {
                        sessionTimeOutCountDown = uiSessionExpiryTimeInMin - uiSessionExpiryPromptIntervalInMin;
                        if (btn == 'yes') {
                            uiPromptMsg= false;
                            uiCheckTime = Ext.Date.now()
                            var date = new Date();
                            var currentTime = date.getTime();       
                            resetTimeout();
                            extendSessionAjaxRequest(false);
                        }
                    }
                });
                }
            },
            interval:1000,
            scope:me

        });


        //Task to show the timeout count-down
        var task = Ext.TaskManager.newTask({
            run:  function () {
                var currentTime = Ext.Date.now();
                var actualTimeout = uiSessionExpiryTimeInMin*60 - uiSessionExpiryPromptIntervalInMin*60;
                var timeDifference =Math.floor((currentTime-initialPopUpTime)/1000);
                if(timeDifference>=(actualTimeout))
                {
                    sessionTimeOutTask.delay(0);
                }
                else
                {
                    sessionTimeOutCountDown = actualTimeout-timeDifference;
                }

                var countdownMinutes =  Math.floor((sessionTimeOutCountDown)/(60));
                var countdownSeconds = sessionTimeOutCountDown - (countdownMinutes * 60) + ' second(s)';
                
                if(countdownMinutes == 0){
                    //if number of minutes equals to zero, do not display minutes part.
                    countdownMinutes = '';
                }
                else
                {
                    countdownMinutes = countdownMinutes + ' minute(s) and ';
                }
                sessionAboutToTimeoutMessageBox.updateText( 
                        Ext.String.format(timeoutConfirmationtMessage, countdownMinutes, countdownSeconds)
                );
            },
            interval: 1000,
            scope:me
        });

        var resetTimeout = function(){
            sessionTimeOutTask.cancel();
            sessionAboutToTimeoutPromptTask.stop();
            task.stop();
            resetTimer();
        }




这里任务 A 是 sessionAboutToTimeoutPromptTask ,任务 B 是 task 函数 重置超时()将重置停止/取消所有任务到默认状态。 当用户加载页面时,任务 A 使用 start 方法启动,任务 B 是在消息框中更新的计数器,在桌面/PC 上,它按预期工作,会话在计时器耗尽后过期。

当 URL 被点击并且设备被锁定时,相同的测试用例在 iPad 上不起作用。 发生的事情是在任务 A 内部,满足 if 条件并显示消息框,但倒计时仅在设备解锁时开始,我认为问题在于消息框在锁定时不会启动计时器。 我想要的是即使设备被锁定并且会话应该过期,计时器仍然应该继续。

有什么解决方案可以激活这个吗?

javascript extjs sencha-touch
1个回答
0
投票

您必须控制

pause
(toBackground)和
resume
(toForeground)。

做这样的事情:

document.addEventListener('pause', this.onPause, false); 
document.addEventListener('resume', this.onResume, false);

hasBeenSleeping: false,

onPause: function() {
    this.hasBeenSleeping = true;
}

onResume: function() {
    if (this.hasBeenSleeping) {
        this.hasBeenSleeping = false;
        if (currentlyAskingForSession) {
            closeDialogAboutSession();
        }
    }
}

onPause: function() {
    Ext.fireEvent('sleeping');
}

Dialog: {
   Ext.on('sleeping', this.closeAndLogout);
}
© www.soinside.com 2019 - 2024. All rights reserved.