2***@qq.com
2***@qq.com
  • 发布:2018-11-09 13:12
  • 更新:2018-11-09 13:12
  • 阅读:2497

hbuider plus app 用户退出登录逻辑-做贡献

分类:HTML5+

啥也不说直上代码,可能有逻辑不严谨的地方,如果有懂的朋友希望给指出。

$('#goOut')[0].addEventListener('tap', function(e) {  
    //清除用户数据  
    localStorage.setItem('$user', '{}');  
        //清除是否长登录  
    localStorage.setItem('$userLogin', '{}');  

    /**  
     * 关闭除了 login 外的所有窗口  
     * 因为原生 activity 活动(窗口)是以栈的形式存在,即,login 刚打开会被压入栈顶,之后打开的页面会压在它上面。  
     * 退出登录逻辑:  
     * 退出登录时只保留栈顶 login(入口页面及当前页面的 webview),其他的都页面 close ,如果当前的如果也被 close 的话,  
     * 那么本页面的 js 就不会执行了,循环就会终端,会出错。这时候只剩下 login 与 currentWebview ,这样还不行,还要等本  
     * 循环关闭 webview 的 js 代码执行完后再把 currentWebview 关闭,这样小只剩下 login(入口页面)了,自然而然,登录  
     * 页面就显示出来了。虽然显示出来了,但是只是加载了 html 与 css 的样式,js 并没有加载,所以还要做其他处理,具体看下面的  
     * 实施方法。  
     * 具体实施:  
     * 1、用 plus.webview.all() 方法获取所有窗口的 webview 对象。  
     * 2、获取当前 webview 对象。  
     * 3、用 webviewObj.reload()方法重新加载一下 login 页面,这样 js 也有了。  
     * 4、循环所有窗口对像的数组(这里奇怪了,数组的第1个居然是入口页面....,与栈不符,就是写死了,为了防止  
     * 以后的变化造成措手不及,还是手动去获取一下“入口页面”的 url 然后再跟数组里每一个窗口对象的 url 进行对比,相等就  
     * 跳过本次循环,避免入口页面也被关闭掉。)关闭不想干的窗口。  
     * 5、关闭当前 webview 页面(窗口)  
     */  
    // 获取所有Webview窗口  
    var all = plus.webview.all();  
    //获取当前页面  
    var currentWebview = plus.webview.currentWebview();  
    //获取入口页面的 url 地址  
    var entranceWebviewUrl = plus.webview.getWebviewById(plus.runtime.appid).getURL();  
    //重新加载 login 窗口  
    all[0].reload(true);  
    for(var i = 0; i < all.length; i++) {  
        if(entranceWebviewUrl == all[i].getURL()){  
            continue  
        }                     
        if(currentWebview.getURL() != all[i].getURL()) {  
            all[i].close('none')  
        }  
    }  
    currentWebview.close('none')  
})
0 关注 分享

要回复文章请先登录注册