【山竹记账前端-react】16.手机上的 bug
大纲链接 §
[toc]
手机调试
- 完成一个页面后就应该使用真手机查看
1. 手机调试步骤 ⇧
1.1. 防火墙开启端口 ⇧
- 搜索 windows 防火墙开启端口
- windows 搜索 高级安全 防火墙
- 打开进入到 入站规则
- 点击 新建规则
- 点击 端口
- 选择默认的 TCP;特定端口 输入 5173
- 点击 下一步;选择允许连接;默认选择所有:域、专用、公用
- 输入任意名称:5173;点击完成
- 这样手机才能访问电脑 ip
- 可自定义需要打开的端口,根据项目的运行使用的端口
1.2. 使用有线连接安卓手机 ⇧
- 确保手机和电脑在同一网络下
- 用
USB连接手机和电脑(需要可以传文件的数据线,不可使用仅支持充电功能的线材) - 打开开发者选项
- 手机开启
USB调试(手机处于解锁状态、手机开启常亮状态)
1.3. 使用 Android 调试桥 (adb) ⇧
使用
platform-toolsadb 工具
- 下载 SDK 平台工具
- 解压到任意目录(如 D:\software\adb)
- 在该目录下 Shift + 右键,选择「在此处打开终端」
- 运行
./adb.exe kill-server 运行
./adb.exe devices,手机会弹出授权确认1 2 3 4 5XS@DESKTOP-B1B73BAFA /d/software/adb-platform-tools $ ./adb.exe devices * daemon not running; starting now at tcp:5037 * daemon started successfully List of devices attached
也可以下载使用
Minimal ADB and Fastboot,效果一样
- 下载
- 双击执行
cmd-here.exe - 运行
adb kill-server - 运行
adb devices,手机会弹出授权确认
参考
- How to install ADB on Windows, macOS, and Linux
- Android 调试桥 (adb)
- 更新 IDE 和 SDK 工具
- Installing the Android Debug Bridge (ADB) Tool
取消授权,重启
- 多次连接或者更换手机连接,有时候需要重新授权
- 在手机「开发者选项」中找到「撤销 USB 调试授权」,关闭 USB 调试
- 切换 USB 模式:将手机的 USB 连接方式从“仅充电”改为“文件传输 (MTP)”或“PTP”
- 重启 ADB 服务:在电脑终端运行
adb kill-server关闭服务,再重新连接设备 - 删除
~/.android文件夹是所有密钥;重启电脑 - 开关调试开关:在手机开发者选项中,关闭「USB 调试」然后再重新打开
1.4. 运行项目,手机访问 ⇧
在容器中启动项目
pnpm run dev
- 电脑可以访问
http://localhost:5173/
使用命令行
ipconfig显示网卡wifi访问ip 找到 IPv4 Address192.168.31.251
- 由于已自动映射到宿主机网络,电脑可以访问
http://192.168.31.251:5173 - 确保手机和电脑在同一网络下
- 用
USB连接手机和电脑(需要可以传文件的数据线,不可使用仅支持充电功能的线材) - 手机开启
USB调试(手机处于解锁状态、手机开启常亮状态) - 手机使用
chrome或者edge浏览器打开要调试的页面- 在打开
chrome://inspect/#devices页面,等待片刻,找到对应页面链接 - 在打开
edge://inspect/#devices页面,等待片刻,找到对应页面链接
- 在打开
- 在
chrome://inspect页面,勾选“Discover USB devices” - 点击
Inspect按钮,打开调试工具,稍等片刻
使用手机中的 chrome、edge 浏览器查看
- 直接访问
http://192.168.31.251:5173 - 点击对应的网址 inspect
- 查看底部部分被遮挡,需要后续调试
使用微信浏览器查看
- 发送信息给自己
http://debugxweb.qq.com/?inspector=true - 点击对应的网址 inspect
- 然后将地址栏改为
http://192.168.31.251:5173 - 点击网页链接
- 可能出现空白页面,需要后续调试
三个方案
- 将窗口高度变短
- 用 JS 代替用户滚动
- 改 UI
2. 方案一:vh-check.js ⇧
- vh-check
- 安装
pnpm install vh-check
main.ts
|
|
main.scss
|
|
- 判断是否可以识别到
--vh-offset否则就使用0px - 并且将有
100vh的地方都改为100svh
也可以直接改
unocss.config.ts
|
|
问答
- 不可使用
height: 100%;代替;因为如果使用,需要从body到 容器组件一路所有的高度都设置一遍height: 100%;很麻烦
参考
自己实现
setRealVh.ts
|
|
对应 CSS 使用:
|
|
3. 方案二:用 JS 代替用户滚动 ⇧
main.ts
|
|
- 无法完全模拟用户滚动
4. 方案三:改需求 ⇧
遇到的bug:有 CSS 动画会影响fix定位
- 外部容器有
transform动画,会将固定定位元素限制在该容器上作为相对定位的父容器 - 固定定位元素会根据该容器的位置进行定位
- 取消
transform动画可以查看固定定位元素相对于更外部的容器定位了
@/layouts/WelcomeMainLayout.tsx
|
|
5. 回顾 ⇧
两种手机查看方式
- 使用
Windows安卓子系统- 方便,但内存要求较高,不方便调试,无法查看控制台信息
- 方便模拟任何尺寸,无需购买额外手机,成本低
- 使用真手机
- 性能好,方便远程调试,可以查看控制台
- 需要接 USB 线麻烦
- 成本高
解决
100vh和真实手机屏幕不一样高被遮挡的问题
- 放弃全屏
- 使用
vh-check调整高度,伪全屏,使页面刚好填满屏幕
- 使用
- 使用
JS帮用户滚一下- 效果不好
- 改造 UI,尽量不被遮挡
- 设计师、产品经理不一定愿意帮你
6. 手机大BUG:微信页面崩溃 ⇧
解决微信页面不显示页面的问题
- 打开
Chrome远程调试 - 打开微信调试页面
- 用大脑解决它
fix(vite)!: drive global HMR through Vite's hotUpdate hook, drop Vite 5 support- #5335 #5335
- 由于当时版本(现已修复)的微信
webview不支持开发调试时热更新模块top-level-await,导致页面报错,整个崩溃 - The hmrTopLevelAwait option is removed. The injected refresh code no longer uses top-level await.
可以使用本地
preview时预览调试
- 打包预览时无需热更新模块,无
top-level-await pnpm run build- 注意去掉
"build": "tsc && vite build --base=/react-mangosteen-1-preview/",中的--base=/react-mangosteen-1-preview/
- 注意去掉
pnpm run preview//localhost:4173也需要添加到防火墙白名单中
7. BUG:链接不能点击 ⇧
链接不能点击了
- 记录解决bug的过程
- 由于
useSwipe(main, { onTounchStart: e => e.preventDefault() })阻止默认行为,导致点击下一页失效 - 去除即可
- 之前添加这句时因为手势滑动屏幕触发手机上弹性动画,body 上添加
overflow-x: hidden;
判断手势滑动方向,是否为左右滑动还是上下滑动
- y 方向上的距离大于 x 方向上的绝对值距离时就判定为上下滑动,否则就是左右滑动
@/hooks/useSwipe.tsx
|
|
·未完待续·
参考文章
- 初始代码:https://github.com/FrankFang/LBQFwq
- 提交历史(五次提交):https://github.com/FrankFang/3iw2WJa/commits/master
- 最终代码:https://github.com/FrankFang/3iw2WJa
相关文章
- 无
- 作者: Joel
- 文章链接:
- 版权声明
- 非自由转载-非商用-非衍生-保持署名