一、h5页面嵌套在小程序中时,系统设置了深色模式,会出现背景色冲突、深色文字显示异常,深色图标显示异常等一些显示上的问题。
因为我司的项目,当时立项时并没有考虑适配深色模式,所以导致了这种情况
解决方式:
在相应的受深色模式影响的页面最外层div加上css background设置为白色(因为我司项目,背景基本是白色所以这样改能行,但应该是不是通用的),当时是快上线了,发现这个问题,急着上就没去整适配,只能用这种办法。
具体的适配可以看看:
h5适配深色模式 - 搜索 - 掘金 (juejin.cn)
二、前端文本复制功能的实现
安装 vue-clipboard3
1 | $ npm install --save vue-clipboard3 |
使用 vue-clipboard3
1 | <button @click="copy(复制的内容)">复制的内容</button> |
三、v3+vant3的图片上传
1 | <van-uploader |
js部分
1 | //图片上传前做判校验 |
四、vant3表单使用textarea+autosize完成表单高度的自适应时,出现滚动条
解决方式:给vant3的表单的van-field__control加上 overflow-y: hidden
1 | ::v-deep(.van-field__control) { |
五、localstorage只能存字符串,存对象时需要转化成json格式,用时记得转化回来
这个其实自己一直知道这个知识点,平时也嘎嘎在用,但是开发着开发着突然不知怎么脑袋抽筋了,忘转化了,导致localstorage.getItem获取的值一直没取到,第一时间还没考虑到是localstorage的原因,浪费了一些时间找问题所在,本来不想把这个当笔记记录的,但是为了让自己涨涨记性还是记下来。
1 | const object = reactive({ |
六、小程序返回使用H5页面返回,放弃小程序自带返回按钮
最开始准备在小程序上使用自定义导航栏,但是自定义导航栏并不生效,取官网才发现:
既然设置不了自定义导航栏,而webview组件又自带导航,我又要放弃小程序自带返回按钮,于是另辟蹊径,webview组件自带导航栏背景颜色是白色,那我把返回按钮和文字都设置为白色,这样就看不到了,用户要点应该也不会取点一个看不到的返回按钮
在小程序的page.json,对应的weiview的页面设置:
1 | { |
七、小程序嵌套h5项目时(使用的webview),从h5返回解决方式
最开始把这个逻辑分析下,不就是h5跳小程序吗?调接口跳转就行了,但去官网看了看因为使用的webview嵌套在小程序中,返回小程序提供了专门的API,调接口跳小程序真的是脱裤子放屁,多此一举(手动狗头)
解决方式:
在项目的index.html中引入微信官方提供的js-jdk,,就可以在页面中使用和 微信相关的 API
1 | <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script> |
使用:
1 | wx.miniProgram.navigateBack() |
八、在微信小程序中使用webview嵌套h5,跳转三方后,从三方返回到自己的h5页面时原本存在locastorage和sessionstorage里的数据全没了
原因分析:
微信小程序中的 WebView
小程序的主要开发语言是 JavaScript
,其中 逻辑层 和 渲染层 是分开的,分别运行在不同的线程中,而其中的渲染层就是运行在 WebView
上:
运行环境 | 逻辑层 | 渲染层 |
---|---|---|
iOS | JavaScriptCore | WKWebView |
安卓 | V8 | chromium 定制内核 |
小程序开发者工具 | NWJS | Chrome WebView |
- 在真机中,需要实现同一域名下不同子路径的应用实现数据交互(纯前端操作,不涉及接口),由于同域名且是基于同一个页面进行跳转的(当然只是看起来是),而且这个数据是 临时数据,因此觉得使用
sessionStorage
实现数据交互是很合适的 - 实际上从 A 应用 跳转到 B 应用 中却无法获取对应的数据,而这是因为 sessionStorage 是基于当前窗口的会话级的数据存储,移动端浏览器 或 微信内置浏览器 中在跳转新页面时,可能打开的是一个新的 WebView,这就相当于我们在浏览器中的一个新窗口中进行存储,因此是没办法读取在之前的窗口中存储的数据
解决方式:
存了的东西没了,就想办法从三方回来时再存一遍呗。
九、vite获取环境变量遇到的坑
在根目录下的.env.prod文件中定义了需要的各种变量,其中定义了NODE_ENV和VITE_APP_ENV用来获取环境变量,发现import.meta.env.NODE_ENV为undefined,于是去官网看了看,只有VITE_前缀的变量才获取的到
1 | NODE_ENV = 'production' |
1 | conlose.log('import.meta.env.VITE_APP_ENV',import.meta.env.VITE_APP_ENV) // 'production' |