1、项目选型
vu3+vant+axios+hbuilder
2、遇到问题
ios 兼容性真他奶奶的恶心
2.1、ios下 axios 请求失效
原因
iOS有UIWebview和WKWebview两种webview。从iOS13开始苹果将UIWebview列为过期API。
解决方案:使用plus.net.XMLHttpRequest
使用plus 之前需要先监听下plusready,否则极限情况下会报错
但是呢,项目中使用的是axios 咱们也不能直接修改源码呀,对吧多麻烦
所以呢 咱们可以直接修改window.XMLHttpRequest 对象
判断ios情况下 window.XMLHttpRequest = plus.net.XMLHttpRequest
完美解决
然后 过了几天 测试发现 发现 ios下timeout 无效
起初呢 我还以为是plus.net.XMLHttpRequest中的timeout有问题,但是写个原生的发现,屁事没有,timeout完美生效
然后呢 使用axios的就是有问题,头疼,最终只能扒源码,最终定位 代码编写顺序问题,哈哈哈,这玩意,真的有点坑爹
axios源码中的timeout 是在request.open()之后设置的,长这样式的
然后呢 plus.net.XMLHttpRequest 需要将 timeout 设置在 open前面 最终长成这样式的就可以了
然后呢 问题来了,改源码了,咋整,咋整 我难道每次发布的时候还需要手动去改源码,这不得累死
然后呢 我就想 要是可以打包的时候给我自动改就好了,然后呢 我把目光瞅向了cmd文件,我虽然不知道打包的时候怎么整它,但是我可以打包之前把这个文件使用cmd命令给修改了
最终 我本地存放了一份xhr.js 在打包之前copy到axios源码下
然后再执行打包,我可真是个大聪明
顺便呢 又写了点自动生成zip文件夹的命令 省的我每次自己压缩了
2.2 ios cookies 失效
ios上不能操作cookies,plus上有个plus.navigator.setCookie的方法 但是上图中你也看到了,不支持了,哎
so 最终换成headers中token验证
2.3 ios项目初始化网络状态问题
ios app中项目初始化会让你选择是否允许该app使用网络,如果项目初始化就调用接口这时候就会出现接口调用不通的情况
so 需要监听网络状态 使用 plus.networkinfo.getCurrentType 获取网络状态
监听网络状态正常的时候再render项目
2.4 左滑返回上一页
安卓情况下 监听backbutton
编辑
嗯 为啥安卓下 那是因为ios下没有
ios 就一个WKWebview层,也没办法实现原生的效果
最终 判断了下左滑事件 强制给他返回上一页了
暂时就酱