移动端调试
VConsole:https://github.com/Tencent/vConsole
网页仅在微信中打开
通过 userAgent 判断是否是微信环境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function getIsWxClient() { var ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) == "micromessenger") { return true; } return false; }
var ua = navigator.userAgent.toLowerCase(); var isWeixin = ua.indexOf('micromessenger') != -1; var isAndroid = ua.indexOf('android') != -1; var isIos = (ua.indexOf('iphone') != -1) || (ua.indexOf('ipad') != -1); if (!isWeixin) { document.head.innerHTML = '<title>抱歉,出错了</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=0"><linkrel="stylesheet" type="text/css" href="https://res.wx.qq.com/open/libs/weui/0.4.1/weui.css">'; document.body.innerHTML = '<div class="weui_msg"><div class="weui_icon_area"><i class="weui_icon_info weui_icon_msg"></i></div><divclass="weui_text_area"><h4class="weui_msg_title">请在微信客户端打开链接</h4class=></div></div>'; } else { }
|
通过 WeixinJSBridge 判断(推荐)
1 2 3 4 5 6 7 8
| function getIsWxClient() { if (typeof WeixinJSBridge !== "undefined") { return true; } else { return false; } }
|
公众号内保持登录状态
微信内网页不可使用 local/sessionStorage
储存,因为它只是一个 webview
组件,并不是一个浏览器。 但是我们可以使用 cookie
储存的方式
参考:关于微信中的 localStorage
及使用 cookie
的解决方案:https://my.oschina.net/crazymus/blog/425650
方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| function setCookie(c_name, value, expiredays) { var exdate = new Date(); exdate.setDate(exdate.getDate() + expiredays); document.cookie = c_name + "=" + escape(value) + (expiredays == null ? "" : ";expires=" + exdate.toGMTString()); }
function getCookie(c_name) { if (document.cookie.length > 0) { let c_start = document.cookie.indexOf(c_name + "="); if (c_start != -1) { c_start = c_start + c_name.length + 1; c_end = document.cookie.indexOf(";", c_start); if (c_end == -1) c_end = document.cookie.length; return unescape(document.cookie.substring(c_start, c_end)); } } return ""; }
|
使用:
1 2 3 4 5
| setCookie("username", "123", 365);
getCookie("username");
|
同样的,也可以做登录状态保存。
ios 端的时间格式问题
在做移动端开发的时候,使用 new Date()
转换后台返回的格式时,在 chrome 之类浏览器和安卓手机上都显示正常,但是在 ios
上显示 Invalid Date
。
例如: new Date(“2020-05-25 11:11:11”).getTime()
正常情况下可以获取时间戳,但是在 iOS 端解析不了。
后来查找发现 ios
只识别 yyyy/mm/dd
这类斜杠格式的日期。
解决办法:
1 2
| freedomTime = freedomTime.replace(/-/g, "/"); new Date(freedomTime).getTime();
|
判断设备
需要解决 ios
和安卓的兼容,首先你的判断当前的设备类型,可以使用mobile-device-detect 这个库来判断。
微信 H5 页面兼容的坑
- ios 端兼容 input 光标高度
- ios 端微信 H5 上下滑动时卡顿,页面丢失
- ios 键盘唤起,键盘收起以后页面不归位
- 安卓弹出的键盘遮盖文本框
- Vue 中路由使用 hash 模式,开发微信 H5 页面分享时在安卓上设置分享成功,但是 ios 的分享异常
这五个问题可以在 微信 H5 页面前端开发,大多数人都会遇到的几个兼容性坑 中查看原因和解决方法