在前端的日常开发工作中,我们负责页面的构建和维护,对于逻辑复杂的页面,调试是不可或缺的一环,pc端拥有强大的chrome开发者调试工具,调试页面会变得非常简单、得心应手。
![强大的chrome调试工具](https://tech.qimao.com/content/images/2023/07/image-10.png)
但内嵌页的调试经常让开发者感到头疼,在之前,遇到疑难杂症时,我们只能添加alert调试代码,一遍又一遍的发布到测试环境,查看打印结果,试着找到一些与问题有关的蛛丝马迹,这样不仅费时费力,如果真的出现了紧急的线上问题,又没有及时得到解决,可能会造成不可估量的损失,而且,随着webkit alert不符合UI规范,客户端将alert函数禁用,我们也失去了最后一根救命稻草。
然而,不必担心!我们可以探索替代方案和新工具,以克服内嵌页调试的困境,提升开发效率。
一、Charles:将本地开发地址mock到app内
Charles是Mac平台上一款优秀的抓包工具,具体的介绍以及使用方法可以参考站内的这篇文章:抓包工具Charles的使用教程-戴旭峰。
我们可以使用Charles抓包工具,将前端本地的页面地址mock到app内,这样我们本地的页面就拥有了端内的环境,可以与客户端进行交互。具体操作方法:
1.首先确定一个含有入口跳转的接口,我们这里以七猫免费小说my-center接口为例,打开app,跳转到我的页面,在Charles抓包结果中找到my-center接口,点击右键,点击Save Reponse选项,将接口返回数据以json的格式保存在本地。
![](https://tech.qimao.com/content/images/2023/07/image-1-1.png)
2. 修改刚才保存的本地数据,将跳转地址修改为前端本地的页面地址
![](https://tech.qimao.com/content/images/2023/07/image-2-1.png)
3.本地数据映射
选择Charles菜单栏,tools -> Map Local... -> Enable Map Local,添加映射数据
![](https://tech.qimao.com/content/images/2023/07/image-3-1.png)
4.重新刷新我的页面,就可以看到页面的入口【阅读历史】已被修改成前端本地地址【福利中心】,这时候我们在本地的改动都会及时更新到客户端内的页面里。
二、Chrome DevTools远程调试Webview
Chrome DevTools远程调试WebView是一种常用的调试技术,可以帮助开发者在WebView中调试H5页面,但是它有一些使用前提:
① 科学上网(需要连接Google服务)
② 仅限安卓设备(安卓版本4.4以上)
③ 可以传输数据的数据线
虽然它的使用门槛有一点高,但它的功能却异常强大,是我平常使用最多的一种调试方法。
具体使用方法:
1.设置WebView为可调试模式
要想将WebView设为可调试模式,需要调用WebView类的静态方法,这就需要客户端小伙伴们的支持,你只需要甩给他们一个参考链接,剩下的他们会帮你搞定一切。(免费小说现在的debug包会默认开启调试模式,给客户端点赞)
![](https://tech.qimao.com/content/images/2023/07/image-4-1.png)
2. 手机通过usb连接到电脑
将手机以数据线的方式连接到电脑,这里需要在手机设置里的开发者模式中打开USB调试功能。
3. 访问Chrome DevTools
在Chrome浏览器里输入地址:chrome://inspect/#devices,我们可以在 Remote Target一栏看到已经连接的设备以及在webview中打开的页面,选择想要调试的页面,点击inspect,即可开始调试
![](https://tech.qimao.com/content/images/2023/07/image-5-1.png)
4.调试页面
Chrome Dev Tools会将手机中的操作界面实时同步到pc端
![](https://tech.qimao.com/content/images/2023/07/image-12.png)
有了Chrome DevTools的调试能力,普通的控制台输出,网络请求都不在话下,我们甚至可以执行断点调试,这是其它调试方法都没有的功能。
![](https://tech.qimao.com/content/images/2023/07/image-13.png)
三、Chrome DevTools + Charles Map Remote
在方法一中,我们只能够调试本地的页面,往往在测试环境中遇到问题时,需要自己mock测试环境中的数据,再进行调试,如此往复,效率还是有点低下。
在方法二中,我们虽然能够直接调试测试环境中的页面,但往往遇到问题时,还是需要修改代码,执行流水线发布到测试环境之后才能再继续调试。
那有没有可以直接使用测试环境中的数据,既能在本地调试,又不需要发版的方法呢?答案是肯定的,我们可以利用Charles 中的Map Remote功能,来实现将指定的网络请求重定向到本地服务器,然后再结合Chrome DevTools的调试功能,可以直接调试,这样可以大大提高调试的效率。
以福利中心为例,将福利中心的地址请求映射到本地服务器。
打开Charles,选择Tools -> Map Remote -> 勾选 enable Map Remote,并新增规则,将需要重定向的地址以及需要重定向到的地址的相关信息按如下格式填写。
![](https://tech.qimao.com/content/images/2023/07/image-14.png)
重新打开福利中心,这个时候请求的接口是测试环境的接口,但访问的页面却是本地的页面,我们可以直接修改本地的代码来调试。
四、Mac: Safari
使用Chrome DevTools调试,虽然功能强大,但是只适用于安卓设备,接下来给大家分享如何使用Safari调试ios设备;
1.Safari 浏览器的设置
打开Safari偏好设置,点击菜单 “高级“ ,在页面最下方选中「在菜单中显示“开发”菜单」的复选框
![](https://tech.qimao.com/content/images/2023/07/image-6-1.png)
2.在 iPhone 手机上 设置
打开手机设置->Safari->高级(最下面)->将 JavaScript 、Web检查器的开关都打开
![](https://tech.qimao.com/content/images/2023/07/image-7-1.png)
3.将iPhone通过数据线的方式连接到mac上,打开Safari浏览器,先运行手机app里面的web页面,再在菜单 “开发” 中选择已连接的手机,找到调试的网页,就能在Safari里面调试了 。
![](https://tech.qimao.com/content/images/2023/07/image-8-1.png)
手机中的效果:
![](https://tech.qimao.com/content/images/2023/07/image-9-1.png)
具体调试效果如下图所示:
![](https://tech.qimao.com/content/images/2023/07/image-10-1.png)
通过Safari调试,我们可以很方便地查看到页面的Dom结构,元素的样式效果;在控制台查看各种 JavaScript 输出;通过网络监控也可以查看网页加载时的网络请求和响应,包括请求头、响应状态、传输大小等,这对于分析性能问题和调试网络请求非常有帮助。
五、iOS: Web Inspector
web inspector是一款在ios端就可实现调试的safari插件,它的优势是不需要连接任何代理,随时随地都可以调试h5页面,它可以查看、检查、编辑和搜索构成网页DOM的元素,查看网页节点和样式的详细信息,可以在控制台查看日志、错误和警告,也可以在控制台中输入js来调试、修改和获取有关网页的信息,可以查看网络请求和响应列表,也可以查看存储的数据的详细信息,例如cookies、本地存储和会话存储。具体使用方式如下:
1.安装插件
打开苹果App Store,搜索web inspector,点击获取,完成安装
![](https://cdn.nlark.com/yuque/0/2023/png/459945/1689908853045-e9eeaa5d-b6ac-4474-8299-ba6c88ca4dcb.png)
![](https://tech.qimao.com/content/images/2023/07/image-11.png)
2.完成设置
首次使用需要完成配置,打开设置-> Safari浏览器 -> 拓展,找到web inspector,并允许拓展
3.调试页面
接下来我们只需要在safari浏览器中打开想要调试的页面,点开web inspector插件,就可以进行页面调试了。
六、vConsole
上面的调试方法都是基于外部工具来实现调试,我们也可以直接将调试工具注入到前端代码里,只要能访问网站,就可以调试。
vConsole就是这样一个轻量、可拓展、针对手机网页的前端开发者调试面板,它提供了以下功能和用途:
- 错误日志和调试信息:vConsole可以捕获和显示应用程序中的错误日志和调试信息。可以在控制台中查看详细的错误堆栈跟踪,帮助我们快速定位和修复问题。
- 网络请求监控:vConsole可以拦截并显示应用程序发出的网络请求。可以查看请求的详细信息,包括URL、请求方法、请求头和响应内容等。这对于调试网络请求问题和监控接口调用非常有用。
- 性能监控:vConsole提供了一些性能指标,如页面加载时间、资源加载时间和内存占用等。这些指标可以帮助我们评估应用程序的性能,并找出可能的性能瓶颈。
- 实时修改和调试:vConsole允许我们在控制台中实时编辑和调试JavaScript和CSS代码,无需重新加载整个页面。这使得快速迭代和实验变得更加便捷。
- 移动端调试:vConsole专注于移动端开发和调试,提供了一套移动设备友好的界面和功能。我们可以在手机浏览器中启用vConsole,实时查看和调试移动应用程序的问题。
- 自定义插件:vConsole支持自定义插件,可以根据需要添加自己的扩展功能。这使得vConsole可以根据项目的具体需求进行定制和扩展。
使用方法:
在项目目录下打开终端,运行以下命令安装 vConsole:
npm install vconsole
在你的代码文件中引入 vConsole:
import VConsole from 'vconsole';
// 创建 vConsole 实例
const vConsole = new VConsole();
配置选项:根据需要配置 vConsole 的不同选项。
const vConsole = new VConsole({
defaultPlugins: ['system', 'network', 'element'], // 默认展示的面板
maxLogNumber: 1000, // 最大日志数量
onReady: function() {
console.log('vConsole is ready.');
},
onClearLog: function() {
console.log('Logs are cleared.');
}
});
实际效果:
vConsole的出现,不仅提高了前端人员的开发效率,也可以帮助测试人员分析接口调用的情况,验证数据传输的正确性。
总结:
H5页面调试是移动端开发过程中不可或缺的一环,综合运用这些工具,我们可以快速定位问题、优化页面性能,并提升用户体验,随着移动端技术的发展,H5调试技术也会持续进步。我们可以期待更加智能化的调试工具,以及更加全面的性能分析功能。