打造最舒适的webview调试环境

你在做移动web开发的时候是不是只是在Chrome下开启移动模式,然后就啪啪啪闷头敲代码了?如果你平时只是做做宣传页,Chrome的移动模式可能就能满足你。但是现在越来越多的应用采用Hybrid的开发方式,这样的话就可能在web页面上调用webview注入的函数,那么,这个页面在Chrome上只会报错,因为我们不在webview里,根本没有注入的那些函数。

以我现在做的项目为例,要在页面里判断在客户端有没有登录,可以这样写:

var isLogin = AndroidWebview.hasLogin() ;

结果可想而知,AndroidWebview是客户端在webview里注入的方法,这里当然会报错了。

2912379.jpg

真机测试

这种情况怎么开发呢?回顾一下以前的两种办法 :

  • 真机 + Chrome inspect :Chrome 版本必须高于 32,其次你的测试机 Android 系统高于 4.4

    1. 先用数据线将 Android 测试机连接到电脑上。需要打开测试机上面“开发者选项”中的 “USB 调试”功能。

    2. 在PC的Chrome上打开Chrome://inspect即可找到你的设备

    3. 手机进入一个webview页面,即可在Chrome上看到调试台了

28429695.jpg

可以看到,第一个记录是手机里的浏览器的;第二个是记录是手机助手里的webview。

  • 真机 + weinre : 在你本地创建一个监听服务器,并提供一个JS脚本,需要在需要测试的页面中加载这段 JS,就可以被 Weinre 监听到,在 Inspect 面板中调试你这个页面。

    1. 安装 weinre npm install -g weinre

    2. 开启 weinre weinre --httpPort 8888 --boundHost -all-

    3. 浏览器打开 localhost:8888 :

36030683.jpg

4. 将 "2" 这段脚本加载到调试的页面最后,手机进入页面,然后进入 "1" ,就可以看到控制台了

11220086.jpg

这两种办法都需要真机测试,你可以想像一下你在开发、调试时的流程:

  1. 写代码

  2. 拿起手机,进入页面

  3. 有BUG,重复1、2

  4. 开发新功能,重复1、2、3

然后你的手不停地在键盘和手机之间切换,多么痛苦。后来,我遇到了Genymotion

Genymotion

这是一款安卓模拟器,有了它我们可以在电脑上开启一个安卓机。具体使用我就不细说了,很简单请自行搜索。

这是我在模拟器上安装的手机助手:

92941591.jpg

而且使用 Chrome inspect 是直接可以调试模拟器中的webview的:

92941591.jpg

这样,我们就可以不用手忙脚乱地写代码、看手机了,一切都在PC上调试。但是我们在模拟器上看到的是线上代码,我们加一个新功能还要发布代码才能看到效果?

Charles / Fiddler

幸好有Charles这样的工具(Windows下请使用Fiddler),Charles会在本地开启一个代理服务,默认接口8888。通过这个代理,模拟器上的请求会被转移到电脑上,我们可以任意地去替换请求文件让我们更加方便地调试页面。

设置监听端口

Proxy Settings - HTTP Proxy - Proxies - HTTP Proxy 中设置

监听Chrome

因为 Charles 只会监听全局和Firefox,为了能监听Chrome,使用Proxy SwitchyOmega插件,增加一个情景模式:

99779359.jpg

在这个情景模式下,我们就可以抓到在Chrome里的数据了:

68809502.jpg

注意:Charles默认是不支持https的,我们选择 设置 - Proxy Settings - SSL ,选中 Enable SSL Proxying 。然后在 Locations 里填写要抓包的域名和端口,点击 AddHost填写域名,如 www.baidu.com ,port443 。具体参考最后的文章。

监听Genymotion

别忘了,使用Charles的初衷是让我们可以用本地的文件替换线上文件,不用每次修改都要发布。

  1. 在Genymotion中,Settins - Network (port选9999是因为我之前在Charles中设置的是9999) :

93993292.jpg

  1. 在开启的模拟器中,设置 - WLAN - 长按2秒 - 修改网络代理设置改为手动,主机名为10.0.3.2,端口为9999,和上面一致。

  2. 然后在模拟器中打开webview页面就可以看到所有请求了

56828398.jpg

  1. 右键保存源文件到本地,然后添加一行alert代码 。

18746003.jpg
95690593.jpg

  1. 在请求上右键,选择 Map Local

85809553.jpg

  1. 选择刚才修改过的文件

  2. 重新载入页面 :

56739214.jpg

这样,我们利用模拟器+Chrome+Charles就可以完美开始、调试webview页面了,模拟器当做手机,Chrome insepct 调样式、接口、查看数据,利用Charles映射本地文件直接查看效果。

至于iOS上的webview调试,模拟器+Safari+Charles应该也是一样的。我没有试过,试过的人请告知。

2015-12-17 更新

最近还使用了 browsersync ,这个东西调试、开发简直不要太爽。在本地开启一个服务器,页面放进去,然后开启模拟器,进入这个页面,保存文件的时候模拟器自动刷新,而且能直接调用客户端的接口,再也不怕报错了。

如果你说 Gulp 也能自动刷新,那下面的是 Gulp 没有的:你在本机开启 wifi ,然后手机连接,进入页面。这样,你每保存一次文件,手机webview 和 模拟器 webview 同时自动刷新,而且这两个页面是同步的,就是说,你在模拟器上点击这个按钮,手机上那个页面也会点击这个按钮。这样你每次测试的时候,电脑旁摆一排测试机,而你也需要模拟器上点一下,这些测试机都会自动点一下! browserSync 自带 weinre ,这样哪个测试机出了问题,你可以直接打开 weinre 调试!

参考

  • 浅谈Hybrid技术的设计与实现

  • 移动前端调试页面–weinre

  • Mac下HTTP/HTTPS抓包工具Charles

  • 前端开发调试线上代码的两款工具

我的博客,欢迎订阅

微博粉丝太少,求粉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淘宝网的技术发展史(二) ——Oracle替换MySQL

本文是《淘宝网的技术发展史》系列连载文的第二篇,在告别个人网站时代后,淘宝网的技术发展迎来了由Oracle开启的第二个时代。文/淘宝技术大学培训专家 子柳MySQL撑不住了 淘宝网作为个人网站发展的时间其实并不长,由于它太引人注目了&#xf…

数据结构——不相交集(并查集)

目的:解决等价问题。 表示方法:森林,底层实现用数组 主要操作:find()、union() 优化手段: ①find()时路径压缩 ②union()时按规模合并、按树高合并(依据情况而定) Java实现: class D…

Android之抓取adb logcat全日志后怎么过滤掉只包含当前app进程的日志(一般抓启动app奔溃日志)

1 、问题 有时候我们启动APP的时候,APP奔溃,在android studio里面日志可能冲掉,或者是云平台的手机安装的app,根本就没有android stduio,那我们用什么办法快速知道启动奔溃日志呢? 2、解决办法 我们先需要…

一个基础的 HTML 文档有哪些标签?(3)

作者简介 作者名:1_bit 简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者。15-16年曾在网上直播,带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息,迷茫的你会找到答案。 目录 HTML基…

考研:中国科学院地理所历年GIS研究生入学考试真题汇总

中科院地理所1997年GIS研究生入学试题 一、名词解释 1.拓扑关系 2.缓冲分析 3.关系数据模型 4.空间叠加 二、简答题 1、GIS的主要功能略 2、企业GIS系统的特色 三、问答题(选2) 1、GIS基本组成与主要应用领域 2、地理科学数据集成与管…

能上架App的GooglePlay开发者账号获取流程

googleplay 开发者账号申请流程 接到公司号召,要让我们的app走向世界,上架GooglePlay,都说天朝的Android 程序员是折翼的天使,猛然发现写了做么多年的Android,竟然不知道怎么成为GooglePlay开发者。 以前尝试过&#x…

如何让 ASP.NET Core 支持绑定查询字符串中的数组(2)

前言上回说到,我们实现了IntArrayModelBinder,可以让 ASP.NET Core 绑定查询字符串中的数组。但是必须显示指定ModelBinder:public string Get([FromQuery][ModelBinder(BinderType typeof(IntArrayModelBinder))] int[] values)而官方提供的…

hdu 3530 Subsequence

/* 开始以为是二分...后来发现丫不单调... */ #include<iostream> #include<cstdio> #include<cstring> #define maxn 1000010 using namespace std; int n,l,r,ans,tmin[maxn],tmax[maxn],a[maxn]; int qmin[maxn],qmax[maxn],headmin,tailmin,headmax,tai…

FirstLetterUtil

package cn.edu.hbcf.common.utils;public class FirstLetterUtil {private static int BEGIN 45217;private static int END 63486;// 按照声母表示&#xff0c;这个表是在GB2312中的出现的第一个汉字&#xff0c;也就是说“啊”是代表首字母a的第一个汉字。// i, u, v都不做…

淘宝网的技术发展史(三)——分布式时代

本文是《淘宝网的技术发展史》系列连载文的第三篇。在系统发展的过程中&#xff0c;架构师的眼光至关重要&#xff0c;作为程序员&#xff0c;把功能实现即可&#xff1b;但作为架构师&#xff0c;要考虑系统的扩展性、复用性&#xff0c;这种敏锐的感觉&#xff0c;有人说是一…

Flutter提示之Navigator operation requested with a context that does not include a Navigator.

1 、问题 用Flutter写了页面跳转&#xff0c;提示错误如下 Navigator operation requested with a context that does not include a Navigator. 2 、我的代码 void main() {runApp(MyApp1()); }class MyApp1 extends StatelessWidget {overrideWidget build(BuildContext c…

《地理信息系统概论》课后习题全部答案_黄杏元

第一章 地理信息系统导论 1、什么是地理信息系统(GIS)?它与一般计算机应用系统有哪些异同点? 答:地理信息系统:是由计算机硬件、软件和不同的方法组成的系统,该系统设计支持空间数据的采集、管理、处理、分析、建模和显示,以便解决复杂的规划和管理问题。 GIS脱胎于…

你知道出现“乱码”的原因是什么吗?(4)

作者简介 作者名&#xff1a;1_bit 简介&#xff1a;CSDN博客专家&#xff0c;2020年博客之星TOP5&#xff0c;蓝桥签约作者。15-16年曾在网上直播&#xff0c;带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息&#xff0c;迷茫的你会找到答案。 目录 HTML基…

Android应用程序线程消息循环模型分析(4)

接下来我们再看看应用程序的配置文件AndroidManifest.xml&#xff1a;<?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" package"shy.luo.counter" andr…

【SignalR全套系列】之在.Net Core 中实现Server-Send Events消息推送

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常开发技巧&#xff0c;如需源码 请公众号留言 源码;如果觉得本公众号对你有帮助&#xff0c;欢迎关注【SignalR全套系列】之在.Net Core 中实现Server-Send Events消息推送1.前文链接&#xff1a;【SignalR全套系列】之…

GIS专业核心课程电子教材配套实验数据汇总(持续更新)

本文整合了GIS专业核心课程电子pdf教材,包括地理信息系统、地图学、遥感、摄影测量、遥感数字图像处理、工程测量、施工测量、GPS、数字测图、空间数据库、程序设计等,持续更新。 一、ArcGIS10实验教程(配套实验数据) 二、地理信息系统

Android数据手册:Android颜色码制表

在Android应用开发中经常要用各种控件&#xff0c;并为控件设置其背景颜色&#xff0c;使用各种不同的颜色为控件着色是很有必要的。 在Android系统中&#xff0c;各种颜色与其对应的码制如下所示&#xff1a; <resources> <color name"white">#ffffff…

Android之提示MIME type application/octet-stream cannot be inserted into **/images expected

1、问题 在三星手机(Androd10.0)我需要把图片插入系统图库,错误提示如下 AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appsinnova.android.keepdrop/com.appsinnova.android.keepdrop.account.AboutActivity}: java.lang.Ille…

7月18日实习日志

今天的上午的工作和昨天一样&#xff0c;上午转发了三十篇&#xff0c;基本上没有遇到什么问题。下午还是转载视频和发稿。 转载于:https://www.cnblogs.com/a1107/p/5706351.html

短网址服务设计

短网址服务设计 背景 短网址服务&#xff0c;用来将输入的一个长网址转换为一个短网址&#xff08;比如附录中的案例&#xff09;&#xff0c;当用户请求这个短网址时&#xff0c;服务查询出真实的url; 设计这么一个短网址服务&#xff0c;需要考虑哪些点&#xff1f; 数据结构…