移动端兼容性问题概览
兼容性问题与手机型号、系统版本有关,只出现在部分手机上
设备更新换代快——低端机遗留下问题、高端机带来新挑战 。
浏览器厂商不统一——兼容问题多 。
网络更复杂——弱网络,页面打开慢 。
低端机性能差——页面操作卡顿 。
HTML5新技术多——学习成本不低 。
常见原因
使用了es6语法:不支持
canvas\promise
等;有部分手机不支持es6,可用babel将es6转成es5。Babel转换问题:Babel 默认只转换新的 JavaScript 语法,但是不转换新的API,比如
Iterator
、Generator
、Set
、Maps
、Proxy
、Reflect
、Symbol
、Promise
等全局对象,以及一些定义在全局对象上的方法(比 如Object.assign
)都不会转码。而@babel/polyfill
就可以做到。缓存问题:由于路由器或者 CDN 缓存,导致请求的文件不是最新的,或者缓存的文件内容缺失。
网络问题:部分地区网络出错,导致第三方插件无法加载、网络协议: http 和 https 使用不对。
JS API 兼容性:
不支持类数组的遍历
典型问题
IOS中input的readonly、disabled问题
disabled: 安卓设备上可以显示,IOS 设备上显示空白。解决:改为
readonly
属性。readonly: IOS 设备上,点击仍会出现软键盘弹框。解决:样式中加
point-events: none
。
IOS移动端click事件300ms的延迟相应
移动设备上的web网页是有300ms延迟的,往往会造成按钮点击延迟甚至是点击失效。这是由于区分单击事件和双击屏幕缩放的历史原因造成的。
fastclick
可以解决在手机上点击事件的300ms延迟。注意:使用了fastclick,可能会引起
<input>
标签点击失效(非必现)。zepto的touch模块,tap事件也是为了解决在click的延迟问题。
绑定ontouchstart。触摸屏顺序:touchstart > touchmove > touchend > click。
消除 transition 闪屏
打电话发短信写邮件怎么实现
打电话:
<a href="tel:0755-10086">打电话给:0755-10086</a>
发短信(winphone 系统无效):
<a href="sms:10086">发短信给: 10086</a>
写邮件:
<a href="mailto:peun@foxmail.com">peun@foxmail.com</a>
屏幕旋转的事件和样式
fixed元素的bug
IOS 下 fixed 元素容易定位出错,软键盘弹出时,影响 fixed 元素定位。android 下 fixed 表现要比 IOS 更好,软键盘弹出时,不会影响 fixed 元素定位。IOS4 下不支持 position: fixed。
暂无完美方案。
Android和Ios设备,打开相机\选择相册功能
软键盘关闭,元素错位(部分安卓机)
弹层(加了position: fixed
)中点击输入框弹出虚拟键盘,在区域1内点击(虚拟键盘关闭),页面元素错位。
原因: 与手机型号和系统版本有关,具体未知 解决方法: 无
相关链接
最后更新于