mui或者uni退出app

Terminator0 2019-12-21

在安卓上可以使用

//1.1
var backButtonPress = 0;
$.back = function(event) {
    backButtonPress++;
    if(backButtonPress > 1) {
        plus.runtime.quit();
    } else {
        plus.nativeUI.toast(‘再按一次退出应用‘);
    }
    setTimeout(function() {
        backButtonPress = 0;
    }, 1000);
    return false;
};
//1.2
mui.back = function() {
    var btn = ["确定", "取消"];
    mui.confirm(‘确认关闭当前窗口?‘, ‘Hello MUI‘, btn, function(e) {
        if(e.index == 0) {
            plus.runtime.quit();
        }
    });
}

H5+官方文档提供的plus.runtime.quit();对Android有效,但对iOS无效。但实际上,iOS系统原生提供了[[NSThread mainThread] exit];方法可以强制退出当前App,并且H5+支持调用iOS原生类的方法(通过plus.ios.importClass和invoke函数),于是就可以变相实现强制退出iOS的App了,代码如下:

if (mui.os.ios)
{
    const threadClass = plus.ios.importClass("NSThread");
    const mainThread = plus.ios.invoke(threadClass, "mainThread");
    plus.ios.invoke(mainThread, "exit");
} else if (mui.os.android)
{
    plus.runtime.quit();
}

 我自己项目所使用的

document.getElementById("tuic").addEventListener("tap", function(){
                var old_back = mui.back;
                var btnArray = [‘是‘, ‘否‘];
                mui.confirm(‘您确定退出?‘, ‘‘, btnArray, function(e) {
                    //当选择是的时候执行
                    if(e.index == 0) {
                        //判断当前设备类型
                        if(mui.os.ios || mui.os.ipad){
                            plus.storage.clear();
                            const threadClass = plus.ios.importClass("NSThread");
                            const mainThread = plus.ios.invoke(threadClass, "mainThread");
                            plus.ios.invoke(mainThread, "exit");            
                        }else if(mui.os.android) {
                            
                            plus.storage.clear();
                            
                            // 获取当前webview窗口对象
                            var curr = plus.webview.currentWebview();
                            //获取所有已经打开的webview窗口
                            var wvs = plus.webview.all();
                            for(var i = 0, len = wvs.length; i < len; i++) {
                                //关闭除当前页面外的其他页面
                                if(wvs[i].getURL() == curr.getURL())
                                //遇到当前页跳过
                                continue;
                                //非当前页执行关闭
                                plus.webview.close(wvs[i]);
                            }
                            /*//打开login页面
                            plus.webview.open(‘Signin.html‘,‘Signin.html‘);*/
                            
                            //执行关闭当前页面
                            
                            curr.close();
                            old_back();//退出app
                        }else{
                            //runtime 运行环境管理模块执行退出 (一般运行不到这里)
                            plus.runtime.quit();
                        
                        }
                    }
                })
            })

相关推荐