聚焦
聚焦
  • 发布:2016-08-23 10:41
  • 更新:2017-12-12 14:42
  • 阅读:8014

mui.back()重写之后,有显示再按一次退出,但程序先退出了,我监控返回键也是这样。找不到Bug,求大神支招。

分类:MUI

plusReady的 代码都在这了,“再按一次退出应用”有提示,但按一下程序就先退出了,不知道是哪冲突引起了,求解决,感激不尽。

    // H5 plus事件处理  
    function plusReady() {  
        ws = plus.webview.currentWebview();  
        wo = ws.opener();  
        ws.show("slide-in-right", 300);  
        window.setTimeout(function() {  
            var s = ws.getStyle();  
            s.left = "0%";  
            ws.setStyle(s);  
        }, 100);  

        //关闭当前页外的所有页面  
        var all = plus.webview.all();  
        var current = plus.webview.currentWebview().id;  
        for(var i=0,len=all.length;i<len;i++){  
            if(all[i].id!==current){  
                all[i].close();  
            }  
        }  

        //首页返回键处理(有效果,但程序先退出了)  
        mui.plusReady(function() {  
            //处理逻辑:1秒内,连续两次按返回键,则退出应用;  
            var first = null;  
            plus.key.addEventListener('backbutton', function() {  
                //首次按键,提示‘再按一次退出应用’  
                if (!first) {  
                    first = new Date().getTime();  
                    mui.toast('再按一次退出应用');  
                    setTimeout(function() {  
                        first = null;  
                    }, 1000);  
                } else {  
                    if (new Date().getTime() - first < 1000) {  
                        plus.runtime.quit();  
                    }  
                }  
            }, false);  
        });  

    }  
    if(window.plus) {  
        plusReady();  
    } else {  
        document.addEventListener('plusready', plusReady, false);  
    }
2016-08-23 10:41 负责人:无 分享
已邀请:

最佳回复

wenju

wenju - https://www.mescroll.com -- 精致的下拉刷新和上拉加载组件

//首页返回键处理,处理逻辑:1秒内,连续两次按返回键,则退出应用  
            var first = null;  
            mui.back = function() {  
                if (!first) {//首次按键,提示‘再按一次退出应用’  
                    first = (new Date()).getTime();  
                    mui.toast('再按一次退出应用');  
                    setTimeout(function() {  
                        first = null;  
                    }, 1000);  
                } else {  
                    if ((new Date()).getTime() - first < 1000) {  
                        plus.runtime.quit();  
                    }  
                }  
            };
wenju

wenju - https://www.mescroll.com -- 精致的下拉刷新和上拉加载组件

原因就是你没有重写mui.back的方法 而是监听了事件..

  • 聚焦 (作者)

    哦,那方法该写在什么位置呢。

    2016-08-23 10:46

  • wenju

    下面 那个地方 写在 plusReady() {} 的任意位置

    2016-08-23 10:47

  • 聚焦 (作者)

    回复 wenju:嗯,弹窗效果是出来了,但还是一样,程序先退出了。

    2016-08-23 10:49

  • wenju

    回复 聚焦:肯定有其他地方做了返回键的监听 .. 你检查一下 把它删了

    2016-08-23 10:50

  • 聚焦 (作者)

    首页没有其他监听啊。其他界面的影响么?我在首页把其他界面全部关闭了。

    2016-08-23 11:00

__raymond

__raymond - https://segmentfault.com/u/_raymond

后来解决了吗

同问!

  • 聚焦 (作者)

    解决了,感谢。

    2017-10-16 12:01

benlampson

benlampson

我的就算贴了最佳答都没用啊

mui.init();  
    var first = null;  
     mui.back = function() {  
                if (!first) {//首次按键,提示‘再按一次退出应用’  
                    first = (new Date()).getTime();  
                    mui.toast('再按一次退出应用11111111');  
                    console.log("qweqweqwewqd");  
                    setTimeout(function() {  
                        first = null;  
                    }, 1000);  
                } else {  
                    console.log("asdasdasd");  
                    if ((new Date()).getTime() - first < 1000) {  
                        plus.runtime.quit();  
                    }  
                }  
            };  
    var Intent;  
    var loginToken;  
    var firstPress = null;  
    plusReady = function() {  
        switch(plus.os.name) {  
            case "Android":  
                Intent = plus.android.importClass("android.content.Intent");  
                break;  
            case "iOS":  
                Intent = plus.ios.importClass("GKLocalPlayer");  
                break;  
            default:  
                // 其它平台  
                break;  
        }  

//      plus.key.addEventListener('backbutton', function() {              
//          if(!firstPress) {  
//              firstPress = new Date().getTime();  
//              mui.toast('再按一次退出应用');  
//              setTimeout(function() {  
//                  firstPress = null;  
//              }, 2000);  
//          } else {                  
//              mui.toast('又按了一次');  
//              if(new Date().getTime() - firstPress < 2000) {  
//                  plus.runtime.quit();  
//              }  
//          }  
//      }, false);  
//      var viewModel = new LP_ViewModel();  
//      ko.applyBindings(viewModel);  
    }  
    if(window.plus) {  
        plusReady();  
    } else {  
        document.addEventListener('plusready', plusReady, false);  
    }  
    var canCloseMask = false;  
    var mask = mui.createMask(function() {  
        return canCloseMask;  
    });
  • wenju

    要放到plusReady 里面的吧

    2017-08-17 14:09

O得六

O得六

用了官方的例子和其他答案都没有效果,还是按一次提示之后立马就退出了。
实在摸不着头脑了,下边是一个折中版本,按一次提示,两次退出。唯一的问题就是:退出后还会在显示一次“再按一次...”,有已经完美解决的大神麻烦告知一下,不胜感激!
mui.back = function() {
var data = 0;
mui.back = function() {
var first = null;
if (!first) {//首次按键,提示‘再按一次退出应用’
first = 1;
mui.toast('再按一次退出应用');
//console.log(data);
data += 1;
setTimeout(function() {
first = null;
data = 0;
}, 1000);
}
if(data == 3) {
// console.log(data);
plus.runtime.quit();
}
};
};

  • 回梦無痕

    你这个有误,你直接复制最上面的最佳回复那个代码

    2017-11-14 08:54

1***@163.com

1***@163.com

1楼的代码没有问题,直接用就行了

nancier

nancier

我以前遇到过这个问题,但是我是用了父页面和子页面引起的,父页面里加载子页面,然后在父页面里写这个双击退出功能,每次点一下就退出了,因为点击返回的时候父页面会响应一次,子页面也会响应,所有程序就认为点击了两次,只要在子页面里禁用返回按钮就可以了

mui.init({  
            //监听Android手机的menu按键  
            keyEventBind: {  
                backbutton: false, //Boolean(默认true)关闭back按键监听  
                menubutton: false //Boolean(默认true)关闭menu按键监听  
            }  
        });  

希望能帮到你

该问题目前已经被锁定, 无法添加新回复