在 iOS 12 中,苹果正式弃用 UIWebView,改成 WKWebView,参考官方声明

  后者在性能、稳定性、功能方面有很大提升,并且与 Safari 具有相同的 JavaScript 引擎(JavaScriptCore)。

  从 Android 4.4 开始,增加 Chromium WebView,用来取代 Android WebKit WebView。

  从 Android 5.0 开始,Chromium WebView 支持以 Android System WebView App 的形式在应用商店中下载,可独立升级。

  Android 可以在 App 中集成其他 WebView 组件,例如如 TBS X5 内核的 WebView,或者集成其他 JavaScript 引擎(默认采用 V8 引擎),例如为 React Native 专门优化的 Hermes。

  而 iOS 上就只能使用系统内置的 WebView。由此可知,iOS 和 Android 对于 CSS 和 JavaScript 的支持度各不相同,在研发时需要注意兼容性。

一、调试的困难

  在客户端中调试网页,不像在 PC 的浏览器有那么完善的控制台,对于网页的各方面都能一目了然。

  

1)注入脚本

  若要调试此类页面,需要些方法,比较常见的有在页面中加入 vConsole 脚本,生成一个控制台。

  

  PageSpy 是一款适用于远程 Web 项目调试的工具(可在异地调试),需要在页面注入脚本,并且还需要在服务器中部署一套控制台系统。

  

2)抓包工具

  或者借助 CharlesFiddler 这类抓包工具来查看网络通信、映射本地脚本等。

  

  不过在 Android 6.0 之后,不会信任从抓包工具导出的根证书,这就导致无法在抓包工具中浏览 HTTPS 通信,不过 iOS 没有这方面的限制。

  而网页中的某些业务可能需要借助客户端的能力(JSBridge)才能完成,但这块无法在 PC 浏览器中实现。

  由此可见,需要有种办法能够调试 iOS 和 Android 两种客户端中的网页。

二、iOS

  iOS 的调试比较简单,可以借助 Safari 浏览器实现。

1)显示开发

  首先显示 Safari 浏览器的“开发”菜单。

  以 macOS 为例,偏好设置 > 高级,然后勾选“在菜单栏中显示开发菜单”。

  

2)开启调试

  然后是开启 iPhone 的 Safari 调试模式,设置 > Safari浏览器 > 高级 > 网页检查器 > 启用。

  

3)两端联调

  现在就可以开始调试了,将手机用数据线与电脑连接。

  在访问页面后,选中开发菜单,找到对应的手机,就能看到访问中的网页地址。

  

4)调试窗口

  点击页码地址,进入调试窗口,常规的诸如网络、元素等调试模块都有。

  

  除了能映射客户端 WebView 中的网页之外,Safari 浏览器中的页面也能同步映射到调试窗口。

三、Android

  Android 配置调试的过程比较波折,可以借助 Chrome 浏览器实现。

1)显示开发者选项

  首先需要在手机中显示开发者选项,默认是隐藏的,各款手机的开启过程可能略有不同。

  以小米为例,我的设备 > 全部参数与信息 > MIUI版本,点击 5~8 下,就会有一个开发者模式开启的提示。

  

2)开启 USB 调试

  然后进入更多设置,翻到最后就能看到开发者选项菜单,进入后,开启 USB 调试。

  

3)Chrome Inspect

  接着打开电脑的 Chrome 浏览器,输入 chrome://inspect。

  

  现在可以在客户端中访问网页,下图的 WebView 表示客户端环境,点击 inspect。

  

  应该是弹出控制台,但是却发生了错误,提示 HTTP/1.1 404 Not Found。

  

  这是因为 Android System WebView 的版本低于电脑 Chrome 浏览器的版本,前者是 117,而后者是 120。

  

  如果移动端的 Chrome 浏览器版本较低,那么在调试时,也会出现同样的问题。

  若未出现上述异常,可直接跳过下一节的版本升级。

4)版本升级

  两者的解决办法都是升级,一个是升级 Android System WebView,另一个是升级 Chrome 浏览器。

  而 Android System WebView 需要到 Google Play Store 中更新。

  由于图中已经是最新版本,因此没有显示更新按钮。

  

  在更新成功后,以小米为例,在开发者选项中,选中 WebView 实现,就能看到当前版本。

  

5)调试窗口

  重新访问网页,提示 Remote browser is newer than client browser. Try `inspect fallback` if inspection fails。

  也就是说,客户端的版本高于电脑浏览器,那么可以点击 inspect fallbak 按钮。

  

  在点击后,就能正式出现完整的调试窗口,左边是网页,右边是控制台。

  当有一端移动网页时,另一端也能看到在移动,两者实现了同步。

  

参考资料:

iOS UIWebView与WKWebView 那些事

Web 浏览器相关的一些概念

小米手机开发者选项在哪?

Chrome远程调试

MIUI 更新 WebView 组件

WebView中的页面调试方法的更多相关文章

  1. webview中的页面兼容iphone6和6+

    其实写这篇文章的本不该是我,而应该是开发ios的小伙伴,但作为一个前端,我想我还是有必要做一下记录的! 首先我想说下在iphone6或者6+中webview内嵌套的页面宽度已经不在是320px,而是3 ...

  2. React 环境搭建及页面调试方法

    React 环境搭建及页面调试方法 |作者:RexFang |出处:http://www.cnblogs.com/rexfang/ |关于作者:Java 程序员一枚 |版权:本文版权归作者和博客园共有 ...

  3. ionic 实现 应用内(webview中html页面点击) 和 应用外 (浏览器html页面点击) 打开本地安装应用

    应用内(webview中html页面点击) : 应用内打开本地安装应用指的是webview里打开应用,需要2个步骤: 1: 需要下载一个cordova插件:com.lampa.startapp ,也可 ...

  4. java web 入门级 开发 常用页面调试方法

    这里介绍一下Java web 入门级开发中常用的代码调式方法;  (  仅供入门级童靴 参考) ; 工具: chrome  浏览器 (版本越高越好); Java web 入门级开发 主要就是两个方面: ...

  5. WebView中shouldOverrideUrlLoading和onPageStarted方法的区别

    WebView中的shouldOverrideUrlLoading和onPageStarted这两个方法就是可以捕获到跳转的url,然后进行一系列的操作,但是他们两到底有什么区别呢? 当点击页面中的链 ...

  6. .net的.aspx页面调试方法

    做.net网站开发,有时候需要调试和察看变量, 1.设置好断点以后, 2.设置调试:VS 菜单: 调试————〉附加到进程————〉在 “可用进程” 列表中选择 标题为 "ASP.NET D ...

  7. Webview获取H5页面js方法参数

    #import<JavaScriptCore/JavaScriptCore.h> #pragma mark UIWebViewDelegate - (void)webViewDidFini ...

  8. 在实际项目开发中keil的调试方法

    转载2015-06-14 20:23:04 一.在keilc的调试状态下,如何观察各个片内外设的运行状态?如何修改它们的设置?​ 在调试状态下,点击Peripherals菜单下的不同外设选项命令,就会 ...

  9. mobile web页面调试方法

    此文已由作者张含会授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 开发过程问题排查 Chrome Emulation关键词:使用方便 模拟各种设备尺寸.像素比.自定义user ...

  10. vscode中php断点调试方法!

    一.PHP的代码断点调试 1.打开vscode的首选项设置,添加"php.validate.executablePath": "D:\\newXampp\\php\\ph ...

随机推荐

  1. 入门篇-其之二-Java基础知识

    目录 对第一个Java程序的思考 外层结构--类 内层结构--main方法 输出语句 注释 单行注释 多行注释 文档注释 文档注释常用标签 使用javadoc命令生成网页风格的文档 阿里巴巴Java开 ...

  2. 《微服务架构设计》——Eventuate Tram框架订阅/消费模式源码解析

    Eventuate Tram框架官方文档: https://eventuate.io/docs/manual/eventuate-tram/latest/getting-started-eventua ...

  3. DB2---创建返回结果集的函数

    在数据验证中,经常遇到需返回结果集的操作,故整理一个返回结果集的DB2函数,便于后期查阅 1.准备测试表 /*创建测试表:设置结果集的属性为表字段*/ CREATE TABLE Test_EXWAST ...

  4. Go with Protobuf

    原文在这里. 本教程为 Go 程序员提供了使用Protocol buffer的基本介绍. 本教程使用proto3向 Go 程序员介绍如何使用 protobuf.通过创建一个简单的示例应用程序,它向你展 ...

  5. ptaCCF

    返回首页 English站点地图联系我们常见问题CCF招聘登录 加入CCF 计算机 CCF简介   中国计算机学会(CCF)成立于1962年,全国性学会,独立社团法人,中国科学技术协会成员. CCF是 ...

  6. JNI编程之字符串处理

    java中的字符串类型是String,对应的jni类型是jstring,由于jstring是引用类型,所以我们不能像基本数据类型那样去使用它,我们需要使用JNIEnv中的函数去处理jstring,下面 ...

  7. .NET开源简单易用、内置集成化的控制台、支持持久性存储的任务调度框架 - Hangfire

    前言 定时任务调度应该是平时业务开发中比较常见的需求,比如说微信文章定时发布.定时更新某一个业务状态.定时删除一些冗余数据等等.今天给推荐一个.NET开源简单易用.内置集成化的控制台.支持持久性存储的 ...

  8. multiset用法汇总

    c++语言中,multiset是<set>库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数是有序的,而且序列 ...

  9. [Python急救站课程]天天向上的力量

    我们要"好好学习,天天向上."那么天天向上的力量到底有多强呢? 1.一年365天,以第1天的能力值为基数,记为1.0,当好好学习时能力值相比前一天提高1‰,当没有学习时由于遗忘等原 ...

  10. NativeBuffering,进一步提升字符串的序列化性能

    在<NativeBuffering,一种高性能.零内存分配的序列化解决方案[性能测试篇]>我比较了NativeBuffering和System.Text.Json两种序列化方式的性能,通过 ...