微信自带浏览器被输入法阻挡文本框的 jQuery 解决方法 by FungLeo

微信自带浏览器被输入法阻挡文本框的 jQuery 解决方法 by FungLeo

前言

做好了项目之后,在各种浏览器里面测试,都没有问题.很高兴,交付后端使用.然而发现在微信自带浏览器里面,却是出现了问题.

我的页面是一堆文本框,需要用户输入,当页面比较长的时候,在下面的文本框会被输入法给挡住…我勒个去.

写了一段JS脚本,测试了一下,发现,在正常的浏览器当中,当调出输入法的时候,视窗的高度,会减少,以适应输入法占据的屏幕空间.在QQ自带的浏览器里面,也是完全正常的.只有在微信里面,存在这个问题.并且,表现形式非常奇葩:

机型 表现形式
iphone6 看上去正常,但视窗高度并没有改变.页面可以滑动
iphone5 不正常,能滑动,但默认没有滑动到当前input
红米note 正常,没有问题
小米4/5 不正常,不能滑动,无法使用

与手机操作系统和微信版本都有关系,上面的表格只是我这边的测试结果.

反正无论如何,微信自带的浏览器不会因为调出输入法就改变视窗的高度,这是最核心的问题.

思路

项目已经做好了,我现在只能打个补丁上去,通篇的解决这个该死的兼容性问题.项目中采用了jquery2版本.因此,这个补丁使用jquery语法来写.

  1. 要将当前焦点的文本框调整到可视区域
  2. 要给页面尾部增加空间,以抵消输入法的高度占据的空间
  3. 考虑性能,只能给微信使用,其他浏览器不执行.

开工

首先找来一段判断是否在微信浏览器的代码,如下:

// 判断是否是微信
function is_weixn(){
    var ua = navigator.userAgent.toLowerCase();
    if(ua.match(/MicroMessenger/i)=="micromessenger") {
        return true;
    } else {
        return false;
    }
}

考虑了一下我的项目中,所有出现这个问题的地方,都是使用了input标签.但是,并非所有的input标签都需要调用出输入法,比如按钮和多选框等.因此,我自己构建了一个判断是否需要调用输入法的函数,如下:

// 判断是否为文本框
function is_text(type){
    if (type=="text" || type=="number" || type=="password" || type=="tel" || type=="url" || type=="email") {
        return true;
    };
}

最后,按照自己的想法,解决了一下这个问题,代码如下:

// 用于解决微信自带浏览器输入法遮挡文本框的处理
$(function(){
    if (is_weixn()){
        var inp = $("input"),
            win = $(window),
            bod = $("body"),
            winH = win.height();
        inp.each(function(){
            var t = $(this),
                tTop = t.offset().top,
                tType = t.prop(‘type‘);
            if (is_text(tType)) {
                t.on(‘click‘,function(event) {
                    bod.height(winH+300);
                    bod.animate({scrollTop: tTop-100 + ‘px‘}, 200);
                });
            };
        });
    };
})

应该是有优化的空间的.不过我的JS水平真心一般.暂时先解决这个问题吧-_-|||

本文由FungLeo原创,转载请保留版权申明,以及首发地址: http://blog.csdn.net/fungleo/article/details/51005911

时间: 2024-12-17 19:57:53

微信自带浏览器被输入法阻挡文本框的 jQuery 解决方法 by FungLeo的相关文章

微信内置浏览器不支持下载APK(APP)软件的解决方法

需求来源 由于微信引流具备快速性和高效的二次传播性,故众多商家纷纷选择微信推广为主要的推广方式.但在使用微信分享链接和营销方案的过程中经常会遇到分享链接在微信内被拦截的情况,导致引流来的用户由于无法打开网页而选择流失.更过分的是,由于都是新用户,故用户即使知道链接无法打开也不会选择反馈,导致问题处理的不及时,错失很多流量. 方案分析 那么当我们在微信内遇到被拦截的问题时,我们应该如何解决呢? 此时我们需要一个能实现微信内直接打开链接或自动跳出到手机浏览器打开的功能.这个功能说难也不难说简单也不简

大象跳转免费提供微信内置浏览器不支持下载APK(APP)软件的解决方法

前言 现如今微信对第三方推广链接的检测是越来越严格了,分享链接在微信中转发经常会被拦截,一旦被拦截用户在微信中识别二维码就会提示"已停止访问该网页",如此一来对外分享的二维码基本就作废了,用户想要访问只能复制链接手动打开浏览器粘贴访问.如此一来会造成用户体验差,用户量无法有效地累积起来,从而导致推广成本一直在增加,推广效率却无法有明显的提升等问题. 所以针对这个问题,特写这篇文章分享给有需要的朋友.当我们遇到这个问题的时候,我们需要一个活码功能和一个跳转功能. 拓展说明: 活码功能的作

安卓版微信自带浏览器和IE6浏览器ajax请求abort错误处理

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46419567 给页面元素绑定了一个click事件用来触发ajax请求,在安卓微信自带浏览器中和IE6下,请求时常会被中断,返回错误类型"abort",在其他浏览器中都一切正常. 在IE6中使用Fiddler2和httpWatch监视请求,经常会出现"aborted",折腾特么一个周末,..... 不说废话了.... 解决办法:在标签上加上onclic

安卓手机微信自带浏览器点击事件失效解决

在移动端做了个导航,长这样 原来结构是用的span <span class="menu_icon"> <img src="img/icon_1.png"> <p>导航</p> </span> 绑定用的是jquery的.click $('.menu_icon').click(function () { $("#nav-phone").stop().animate({right:"

【LaTex】Texstudio中中文文本乱码问题的解决方法

Texstudio中中文文本乱码问题的解决方法:1.因为默认编码是UTF8,ctex的编码是GBK,所以出现乱码.将texstudio编码设成GBK乱码自然消失.2.通过拷贝粘贴,不会出现乱码.3.texstudio构建的编译平台是pdflatex,GBK编码时无需加UTF8选项,加了反而慢,甚至出错.不知为什么?4.编码是UTF8时,宜用xelatex编译,很快.5.Sublimetext可将GBK编码转存为UTF8,转存后用texstudio打开不会出现乱码.如果出现将默认编码改成UTF8就

关于微信网页/H5游戏开发中二维码无法识别的解决方法

我接触微信H5开发已经有一年多了,做过很多案例也遇到很多的问题.今天我把困扰我半年之久的问题分享出来,也就是关于微信网页/H5游戏开发中二维码无法识别的解决方法. 我在百度搜索了许久,关于微信H5网页/游戏开发问题以及解决方案的相关文章少之又少,在相关前端交流群中问别人,一问三不知,平时这些群就会上班吹牛逼,真正交流问题的人少又少,真是揪心啊,最后还是得靠自己解决了. [这里,我先举个栗子] 上面这个页面,相信从事微信H5开发的人应该很熟悉,就是常见的分享到朋友圈的页面,通常以[引导分享图标]+

兼容firefox,ie,谷歌,阻止浏览器冒泡事件,Firefox不支持event解决方法

兼容firefox,ie,谷歌,阻止浏览器冒泡事件,Firefox不支持event解决方法 // 获取事件function getEvent(){ if(window.event) {return window.event;} func=getEvent.caller; while(func!=null){ var arg0=func.arguments[0]; if(arg0){ if((arg0.constructor==Event || arg0.constructor ==MouseEv

asp.net 微信企业号办公系统-表单设计-文本框

点击表单设计器工具栏上的文本框按钮,会弹出文本框属性对话框: 绑定字段:该文本框与表单属性设置中选择的表的某个字段绑定(该文本框中的值将会保存到该字段中). 默认值:该文本框的初始化值. 宽度:文本框的宽度,如:200px,60%格式. 最大字符数:文本框可输入的最大字符数,对应 maxlength 属性. 输入类型:明文或者密码类型,对应input 的type='text'或type='password'. 值类型:输入的文本类型,表单提交时会验证输入的类型是否符合规定. 事件:可以给文本框绑

IOS系统下虚拟键盘遮挡文本框问题的解决

最近在项目中发现同样的代码在Android端微信网页中点击文本框唤出的虚拟键盘不会遮挡文本框,但是在IOS端的微信网页中点击文本框唤出的键盘却在大部分情况下会遮挡文本框 经过高人指点,这个问题终于解决了 下面说说解决办法: 主要代码 document.body.scrollTop = document.body.scrollHeight; 然后在文本框获取焦点的时候,可以定义一个计时器,一直执行上面的那句话 在文本框失去焦点的时候,就把之前的计时器清除掉即可 js写法: let interval