移动端开发经验总结

1. ios上,用户点击输入框,键盘不响应

  • 问题重现:财酷3.0,某个页面的某个输入框,点击输入,键盘不响应,而其它页面键盘响应正常。
  • 问题排查:经排查,是因为该输入框绑定的聚焦事件中,执行了大量的js操作,阻塞了进程,导致键盘未及时响应,进而不响应。
  • 解决方法:将该绑定的聚焦事件中的js操作设置一定的延迟时间,不阻塞键盘响应即可。这里的代码仍需优化,聚焦时js操作的时机是否合适?

2. ios/Andriod上,js中的alert, confirm,prompt不可用

  • 问题重现:财酷4.0开发中,发现js中使用的上述方法不可用,在安卓中甚至会导致进程卡顿
  • 问题排查:经排查,是因为webview中默认不可用
  • 解决方法:natvie端重写这个3个方法支持,或者调用系统原生方法即可

3. 安卓上,css画圆发生变形

  • 问题重现:css使用border-radius画圆时,postcss将宽高像素转成rem,在安卓上小圆发生变形,显示为椭圆(在安卓中会有此问题,ios正常)
  • 问题排查:安卓上,px转rem后,虽然宽高均相同,但是显示出来的圆形宽比高多1px
  • 解决方法:使用内联样式来写宽高,这样就不会被转成rem了。

4. iPhone 输入框失焦延时

  • 问题重现: 输入框聚焦后弹出软键盘,未输入信息和未关闭软键盘,直接点击回复按钮弹出alert提示框,不同iphone版本出现以下两种情况:
    1、软键盘未关闭还能编辑,弹出框卡死不能点击。
    2、软键盘关闭,关闭alert弹出框后出现软键盘打开又关闭?
  • 问题排查:经排查,输入框失焦和alert关闭会有一定的延时,两个混在一起导致。
  • 解决方法:弹出alert提示框前添加延时,让输入框失焦完成后再弹出提示框。

5. iPhone上,锁屏几分钟之后,之前页面的能够点击现在不能点击了,页面出现了假死。

  • 问题重现:iPhone上ios11.3系统,锁屏之后,之前页面的能够点击地方现在不能点击了,页面出现了假死。
  • 问题排查:ios11.3支持了Web API:允许对事件支持被动模式,减少滚动屏幕的性能损耗和奔溃,document的touch事件监听添加passive配置,即是:{passive: true},会永远不调用event.preventDefault(),导致页面不能点击,出现假死。
  • 解决方法:使用新的fastclick.js文件就可以解决。

6. 安卓手机上,点击页面的输入框获取焦点,软键盘拉起,但是该输入框的位置往上移很远。

  • 问题重现:安卓手机上,点击页面的时候获取焦点,软键盘拉起,但是该输入框的位置往上移很远,页面效果很差。
  • 问题排查:安卓设计的时候,webview和软键盘不在同一个页面,前端这边监听不到页面resize事件,没有调用document.activeElement.scrollIntoViewIfNeeded(),把那个对应的输入框位置往下移
  • 解决方法:安卓这边重新设计webview和软键盘在同一页面,拉起键盘的时候,使webview变小,我们这边设置浏览器窗口监听,具体代码是:
window.addEventListener('resize', function(){
    const formItems = ['INPUT', 'TEXTAREA'];
    const activeElTag = document.activeElement.tagName;
    formItems.forEach(function(item){
        if (activeElTag === item) {
            setTimeout(function(){
                // 若兼容pc使用scrollIntoView
                document.activeElement.scrollIntoViewIfNeeded();
            }, 0);
        }
    });
});

7. postcss-px2rem-dpr设置不转换rem不可用

  • 问题重现:业务中有不需要转换为rem的场景,在css中设置/*px*/ 或者/*no*/无效,样式中的px依然会转换为rem,并不会生效
  • 问题排查:经排查发现,是因为我们使用的css/less/sass-loader等插件,默认会删除样式中的注释,导致注释不可用。问题查见:webpack 中 postcss-px2rem 生产环境中注释失效
  • 解决方法:在vue-loader配置中,设置outputStyle为expanded,这样就不会去删除样式中的注释。具体设置方法是对所有的css的loader设置如下:
   {
        loader: 'postcss/less/sass/less-loader',
        options: {
            sourceMap: options.sourceMap,
   +        outputStyle: 'expanded'
        }
    };

这期间遇到的一个问题是,当设置了outputStyle时,.postcssrc.js文件必须挪到最外层才会生效,这个是挺奇怪的,还没找到原因所在。

8. ios上,页面跳转至平台客服再返回,因拿不到NATIVE方法,导致请求没有传groupId,所有请求都报404.

  • 问题重现:财酷4.0,iOS平台投诉页面进入平台客服后,点击返回,所有页面请求报404。
  • 问题排查:经排查,因拿不到NATIVE的方法(iOS还没获取到webview上下文就已经给NATIVE注入对象了),导致请求没有传groupId。
  • 解决方法:暴露一个方法给iOS让他在注入方法对象后再加载前端代码,(main.js中多包一层Function给native调用)。

9. webview中beforeUnload事件无法被触发.

  • 问题重现:在compfas中想使用beforeUnload来触发leavePage的页面埋点,结果无效。
  • 问题排查:经排查,在PC的file域中关闭或刷新都可以触发beforeUnload事件,放置在手机APP内调试的时候就无法触发,因为Android APP直接销毁activity而没有关闭webview。
  • 解决方法:换个思路,通过修改redirect、toIndex和toUrl方法来调用leavePage埋点方法。

10. ios输入框类型出错(如input textarea)(不能输入内容)

  • 问题重现:在全局中加入*{user-select: none}。
  • 问题排查:由于在全局设置了不能复制内容的代码(*{user-select: none}),导致输入框类型的输入有问题(google浏览器的bug)。
  • 解决方法:不要用通配符(*)设置在全局中,可将除输入框类型以外的加上{user-select: none},比如我放在了通用的css中reset.css,只包括了展示类的标签,不包括输入框类型的标签(input textarea)。

11. IOS下click事件失效

  • 问题重现:在ios手机上,点击页面没有效果,不能进行跳转,Android手机正常。
  • 问题排查:经排查,在ios手机上对于不是a或者button可点击的元素,需要给点击的目标元素加上一个样式cursor: pointer;。
  • 解决方法:【代理元素】可以是【目标元素】的父级元素,document,body等,【目标元素】可以是任意标签,但是要设置cursor: pointer;
  • 参考资料:https://blog.csdn.net/camillezj/article/details/78028847

12. IOS下,脚部按钮absolute定位,拉起键盘,按钮会将输入框盖住

13、android系统问题:去除input框聚焦时的外边框高亮

  • 问题现象:input框聚焦时默认有一个高亮效果,提示用户当前焦点位置,有时候我们UI可能不需要这个高亮效果,或者这个高亮效果比较不美观,那么可以取消或者覆盖这个效果
  • 解决方式:
input:focus,textarea:focus {
  outline: none; // 取消默认高亮样式
  border-color:#333;  // 设置聚焦样式
}

14、android系统问题:inputdisable默认样式

  • 问题现象: 输入框的disable默认样式是灰色的背景色,这个需要注意修改
  • 解决方式:
input:disabled,
textarea:disabled {
    background: #fff;
    color: #000;
    opacity: 1;
    -webkit-text-fill-color: #000;
}

15、android问题:使用react-native-webView组件闪退

  • 问题现象: A页面使用react-native-webView组件,在跳转B页面时三星手机发生闪退
  • 解决方式:
//1. 属性中添加一个透明度  opacity: 0.99
<AutoHeightWebView
  style={{
    marginBottom: 100,
    opacity: 0.99
  }}
  onHeightUpdated={height => this.setState({height})}
  source={{html: HTML}}
/>

//2. 禁止安卓使用硬件加速
<WebView
  style={style}
  source={source}
  androidHardwareAccelerationDisabled
/>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容