前言移动端开发在前端里像神一样地存在,不是说它多难而是说它坑位实在太多了,怎样填都填不完 。Android和IOS各显神通,Android的系统版本和屏幕分辨率多得难以一招兼容,iOS的顽固标准和未知特性多得难以快速掌握 。
三年半沉淀通过本文记录下所遇到的坑位,或许有些坑位还未遇到,但本文记录的40条坑位绝对能让同学们少走很多弯路,特别是前端小白 。为了减少废话提高本文质量,对以下内容做一些约定 。
- 提及的安卓系统包括Android和基于Android开发的系统
- 提及的苹果系统包括iOS和iPadOS
- 本文针对的开发场景是移动端浏览器,因此大部分坑位的解决方案在桌面端浏览器里不一定有效
- 解决方案若未提及适用系统就默认在安卓系统和苹果系统上都适用,若提及适用系统则会详细说明
- Webkit及其衍生内核在移动端浏览器市场占有率里达到惊人的97%,因此无需太过担心css3、ES6和浏览器新特性的兼容性
- 真正的开发环境都是基于webpack构建,因此代码演示都不会带上CSS前缀,除非该属性是Webkit独有才会带上-webkit-
本来想为每个坑位都截图或录制GIF作为演示,但考虑到目前掘金的Markdown编辑器操作图片还存在缺陷就放弃了,每次上传图片都会花费很多时间甚至上传失败(望掘金的产品小姐姐和程序小哥哥优化喔) 。若需演示只能自行复制代码了 。
html方向调用系统功能使用<a>能快速调用移动设备的电话/短信/邮件三大通讯功能,使用<input>能快速调用移动设备的的图库/文件 。
这些功能方便了页面与系统的交互,关键在于调用格式一定要准确,否则会被移动端浏览器忽略 。
<!-- 拨打电话 --><a href="tel:10086">拨打电话给10086小姐姐</a><!-- 发送短信 --><a href="sms:10086">发送短信给10086小姐姐</a><!-- 发送邮件 --><a href="mailto:young.joway@aliyun.com">发送邮件给JowayYoung</a><!-- 选择照片或拍摄照片 --><input type="file" accept="image/*"><!-- 选择视频或拍摄视频 --><input type="file" accept="video/*"><!-- 多选文件 --><input type="file" multiple>复制代码
忽略自动识别有些移动端浏览器会自动将数字字母符号识别为电话/邮箱并将其渲染成上述调用系统功能里的<a> 。虽然很方便却有可能违背需求 。<!-- 忽略自动识别电话 --><meta name="format-detection" content="telephone=no"><!-- 忽略自动识别邮箱 --><meta name="format-detection" content="email=no"><!-- 忽略自动识别电话和邮箱 --><meta name="format-detection" content="telephone=no, email=no">复制代码
弹出数字键盘使用<input type="tel">弹起数字键盘会带上#和*,适合输入电话 。推荐使用<input type="number" pattern="d*">弹起数字键盘,适合输入验证码等纯数字格式 。<!-- 纯数字带#和* --><input type="tel"><!-- 纯数字 --><input type="number" pattern="d*">复制代码
唤醒原生应用通过location.href与原生应用建立通讯渠道,这种页面与客户端的通讯方式称为URL Scheme,其基本格式为scheme://[path][?query],笔者曾经发表过《H5与App的通讯方式》讲述URL Scheme的使用 。- scheme:应用标识,表示应用在系统里的唯一标识
- path:应用行为,表示应用某个页面或功能
- query:应用参数,表示应用页面或应用功能所需的条件参数
若在页面引用第三方原生应用的URL Schema,可通过抓包第三方原生应用获取其URL 。
<!-- 打开微信 --><a href=https://www.isolves.com/it/cxkf/ydd/html5/2021-03-18/"weixin://">打开微信打开支付宝打开支付宝的扫一扫
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Vue前端开发规范
- MySQL必须要掌握的常用查询语句
- 嘘,认真看!Layui一定是Java程序员必备后台前端框架
- JavaScript前端各种文件下载功能的实现
- web前端HTML高频面试题
- 防火墙必须掌握的区域特性与划分
- 前端工程师如何判断一个对象是否有某个属性?
- 如何快速掌握Web前端技术?
- 2021年Web开发必须知道的7大顶级趋势
- 路由器经常掉线,必须重新插拔网线才能上网。什么原因?