1***@qq.com
1***@qq.com
  • 发布:2016-11-27 22:08
  • 更新:2016-11-27 22:08
  • 阅读:12925

学习笔记自我小结(1)

分类:MUI

===========ios 与 安卓 软键盘调用事件==============
javascript

var openSoftKeyboard = function() {  
                if(mui.os.ios) {  
                    var webView = plus.webview.currentWebview().nativeInstanceObject();  
                    webView.plusCallMethod({  
                        "setKeyboardDisplayRequiresUserAction": false  
                    });  
                } else {  
                    var webview = plus.android.currentWebview();  
                    plus.android.importClass(webview);  
                    webview.requestFocus();  
                    var Context = plus.android.importClass("android.content.Context");  
                    var InputMethodManager = plus.android.importClass("android.view.inputmethod.InputMethodManager");  
                    var main = plus.android.runtimeMainActivity();  
                    var imm = main.getSystemService(Context.INPUT_METHOD_SERVICE);  
                    imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);  
                }  
            }  
            1.   
            mui.plusReady(function() {  
          //页面隐藏事件  
                plus.webview.currentWebview().addEventListener("hide",function(e){  
                    document.getElementById("search").value="";  
                    document.getElementById("search").blur();//搜索框取消焦点,关闭软键盘  
                });  
                //页面显示事件  
                plus.webview.currentWebview().addEventListener("show",function(e){  
                    setTimeout(function() {//自动打开软键盘,搜索框获取焦点  
                        openSoftKeyboard();  
                        document.getElementById("search").focus();  
                    }, 600);  
                    return false;  
                });  
})

ios 与 安卓 软键盘调用事件:
用于app商城首页点击搜索框,右滑出webview 搜索页面。
注意的bug: ajax 调用 、 createview 的创建 或者 销毁、plus.nativeUI 的 showWaiting() closeWaiting() 等等,会引起当前页面的聚焦问题,所以会导致blur()的触发,而blur()会自动调用native 的 软键盘关闭。
综上所述,由于各种原因导致失去焦点,引起软键盘闪退。

focus() 聚焦引起的软键盘闪退问题: 做适当的延迟就行了
setTimeout(function() {
mobile.focus();
}, 300)

软键盘的数字选项:(默认英文选项)
<input id="search" type="tel"/>

===========双击回退按钮后关闭app的方法================
//首页返回键处理
//处理逻辑: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();  
}  
}  

};

真机调试(手机联调):(12/2)
明明方法正确,但是执行不了,遇到这个问题, 退出真机联调的app应用重新登录, 不需要重启服务器。
比如我预加载list页面,

mui.plusReady(function() {  
    var page = mui.preload({  
        url:'list.html',  //注意路径的配置(根据当前路径来配置)  
        id:'list.html',  
    })  

    mui.fire(page,'listPage',{  
        myId: "35467"  
    });    
});

在list 页面获取传过来的参数。


mui.plusReady(function () {  
    //添加infoEvn自定义事件监听  
    window.addEventListener('listPage',function(event){  
        //获得事件参数  
        var myId = event.detail.myId;  
        mui.alert("please waiting..."+ myId);  
        //plus.nativeUI.closeWaiting();  
        //根据id向服务器请求数据  
    });  
})

获取了好几次都没有获取到,不知道为什么? 重启了好几次真机app,才运行出来。。(或许是真机app有缓存?)

12/3

Uncaught RangeError: Maximum call stack size exceeded:

chrome 报堆栈错误
如果控制台报这个错误,可以在chrome中可以查看。

可能存在的原因: 可能是 html5+ 的 plus.ready 与 mui.plusReady 冲突。
一个页面,要么是 plus.ready 要么就是 mui.plusReady

顶部选项卡-可左右拖动+scroll区域滚动:

<div id="slider" class="mui-slider mui-fullscreen">
只需要在slider中添加一个mui-fullscreen就好

12/6

Uncaught RangeError: Maximum call stack size exceeded

chrome 报堆栈错误
如果控制台报这个错误,可以在chrome中可以查看。

可能存在的原因: 可能是 html5+ 的 plus.ready 与 mui.plusReady 冲突。
一个页面,要么是 plus.ready 要么就是 mui.plusReady

顶部选项卡-可左右拖动+scroll区域滚动

<div id="slider" class="mui-slider mui-fullscreen">
只需要在slider中添加一个mui-fullscreen就好

上拉加载:动态添加数据
一定要作用在 mui-scroll 的元素上: 如下
(仔细审查demo上的代码,严格按照demo上固有的代码结构还有js作用的元素来重新组织自己的代码)

$('#offCanvasContentScroll .mui-scroll').pullToRefresh({  
                    up: {  
                        callback: function() {  
                        var self = this;  
                            setTimeout(function() {    
                                mui.ajax("../json/china.json", {   
                                    type: "post",  
                                    dataType: "json",  
                                    timeout: 10000,//超时时间设置为10秒  
                                    success: function(data) {  
                                        var ul = self.element.querySelector('#pro-list');  
                                        ul.appendChild(createFragment());  
                                        self.endPullUpToRefresh();  
                                        lazyLoadApi.refresh(true);  
                                        bindProClick();  
                                    },  
                                    error: function(xhr,type,errorThrown) {  
                                        mui.alert("error: "+ type);  
                                    }  
                                });  
                            }, 70);    
                        }  
                    }  
                });  

各类组件如果是用动态添加数据或者追加数据的方式,导致组件无法触发,一般情况下,重新调用组件方法进行激活即可。

4 关注 分享
1***@qq.com 3***@qq.com Trust 2***@qq.com

要回复文章请先登录注册

2***@qq.com

2***@qq.com

真心谢谢你,我用到了,登录的时候and没事,键盘自动关闭,ios不行,键盘跟着到了主页面,点登录的时候 先把所有的input框失去焦点就可以了。
2017-12-01 09:54
雕龙web

雕龙web

感谢分享,还有一些类似拍照闪退的坑,不知道如何解决
2017-04-28 16:58
5***@qq.com

5***@qq.com

Mark
2017-04-27 16:41
1***@qq.com

1***@qq.com (作者)

回复 d***@sina.com :
好的,都是些小坑,不一定全对,你可以检测一下。
2016-12-07 14:56
d***@sina.com

d***@sina.com

谢谢分享,注释可以再多点,看的好困难
2016-12-07 14:44