移动端Web开发调试之Weinre调试教程

简介: 原文地址:http://blog.csdn.net/freshlover/article/details/42640253在设计师与前端开发人员的努力下,一个WebApp出炉了,可是测试人员说了一堆的问题:某某机型下页面表现不一致,某某系统下页面如何如何,某某系统浏览器下页面怎么怎么滴。

原文地址:http://blog.csdn.net/freshlover/article/details/42640253

在设计师与前端开发人员的努力下,一个WebApp出炉了,可是测试人员说了一堆的问题:某某机型下页面表现不一致,某某系统下页面如何如何,某某系统浏览器下页面怎么怎么滴。看着满满的测试汇总文档,我们曾经在一个又一个知名或不知名的手机终端上重复着这些工作:仔细的排查代码,alert可疑的变量,甚至不惜重构来尝试解决这种不一致的问题。虽然说Android 4.0+以上的移动设备支持桌面版Chrome远程调试,而且在Android 4.4以下也仅限于预览Chrome手机版浏览器内部效果,我们无法在问题浏览器下实时联调。此时我们往往无奈地将这些问题归为浏览器兼容性bug。我们暗暗思想着,要是手机端浏览器有个类似Firebug的调试工具就好了!现实不是!移动互联网时代,浏览器发展的趋势、浏览器调试工具发展的未来一定是基于移动端调试的便利性、远程调试的广泛支持。我们大胆预言,支持多终端跨设备跨浏览器的远程调试工具将会越来越多。

Weinre(WebInspector Remote)是一款基于Web Inspector(Webkit)的远程调试工具,借助于网络,可以在PC上直接调试运行在移动设备上的远程页面,中文意思是远程Web检查器,有了Weinre,在PC上可以即时修改目标网页的HTML/CSS/JavaScript,调试过程可实时显示移动设备上页面的预览效果,并同步显示设备页面的错误和警告信息,可以查看网络资源的信息,不过weinre不支持断点调试。该项目目前是 Apache Cordova 的一部分。

weinre工作原理
两张图读懂Weinre的工作机制:



上述三层结构示意图的含义:
Debug客户端(client):本地的WebInspector,远程调试客户端。
Debug服务端(agent):本地的HTTPServer,为Debug目标页面与Debug客户端建立通信。
Debug目标页面(target):被调试的页面,页面已嵌入weinre的远程js。
客户端、目标页面与Debug服务端之间使用XMLHttpRequest (XHR)进行HTTP通信,你通常的使用情形是将Debug客户端与服务端搭建在桌面开发环境,Debug目标页面放在移动设备。
由于Weinre的debug客户端是基于Web Inspector开发,而Web Inspector只兼容WebKit核心的浏览器,所以只能在Chrome/Safari浏览器打开Weinre客户端进行调试。

我在Chrome 38/39版本测试时打开Debug客户端出现页面白板,原因未知,了解原因的欢迎留言给我。换为Safari浏览器打开则正常。


Weinre系统支持性
iOS 3.1.3或更低版本不支持
webOS 1.45或更早版本不支持

Debug客户端支持的平台
weinre的Mac程序(自带客户端) - Mac OSX 10.6 64-bit
Google Chrome 8及以上版本浏览器
Apple Safari 5及以上版本浏览器

Debug目标页面支持的平台
Android 2.2+系统浏览器
Android 2.2+ 中的phonegap
iOS 4+ 的safari浏览器
BlackBerry v6.x 模拟器
webOS
chrome8+
safari5+

关于Weinre的Java版本下载地址无法访问的问题,借用skyhh同学的话,是由于weinre被PhoneGap收购,PhoneGap又被Adobe收购,Adobe收购PhoneGap后,把PhoneGap捐给了Apache,Apache把PhoneGap放在Cordova的项目中。Weinre也从最初的Java移植到了当前的JavaScript。在GitHub上搜索weinre的结果中前两个就是官方的Weinre项目。

先说第二个项目,是Apache后来推出的JavaScript版本weinre,需要在nodejs环境下安装使用,使用npm包管理工具也可以直接下载安装。
安装与服务启动命令如下:

[plain] view plain copy

派生到我的代码片
派生到我的代码片

npm -g install weinre //安装weinre

weinre --boundHost [hostname | ip address |-all-] --httpPort [port] //启动weinre

机器上有nodejs开发环境的同学到此即配置完毕,没有nodejs环境的继续往下看。

第一个项目pmuellr/weinre是Java版的,目前项目已经转移到 http://people.apache.org/~pmuellr/weinre/
进入后找到二进制jar包的非官方打包地址 http://people.apache.org/~pmuellr/weinre/builds/
进入后找到1.6.1版本下载解压得到weinre.jar即可使用。
直接贴出1.6.1版本的jar包下载地址:http://people.apache.org/~pmuellr/weinre/builds/1.x/1.6.1/

其余的项目有的是Grunt下的解决方案,感兴趣的可GitHub自行查看。

安装Java版本的weinre需要有Java开发环境。
首先安装JDK,并设置环境变量。
新建系统变量JAVA_HOME,设为安装目录D:\Program Files\Java\jdk1.6.0_43


新建/编辑系统变量classpath,设置为.;%JAVA_HOME%\lib;(注意前面的点与分号)


新建/编辑系统变量Path,设为;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin


然后打开命令提示符,输入java –version 如果出现版本号,则表示安装配置正确。


然后进入weinre的解压路径,在命令提示符窗口运行以下命令:

[plain] view plain copy

派生到我的代码片
派生到我的代码片

java -jar weinre.jar --httpPort 8910--boundHost -all-


然后在Safari浏览器地址栏输入 http://localhost:8910/,若打开如下所示页面,则表明weinre服务启动成功。

说明:weinre默认使用8080端口,服务器主机名默认使用localhost,需要修改可在上述命令中进行设置,比如可以绑定为开发机器的内网IP地址。为了能在本地使用localhost打开,又能在移动设备或本地环境用IP地址打开Weinre调试工具,我们需要设置boundHost为"-all-",同时要确保调试页面所在设备与当前开发环境(包括Debug客户端和Debug服务端)都处于同一网段内。Weinre绑定端口一定不能与本地环境已监听的端口冲突,确保绑定的是闲置端口,例如我设置的是8910。
Weinre还提供了下面的启动参数:
--help : 显示Weinre的Help
--httpPort [portNumber] : 设置Weinre使用的端口号, 默认是8080
--boundHost [hostname| ip address | -all-] : 默认是'localhost', 这个参数是为了限制可以访问Weinre Server的设备, 设置为-all-或者指定ip, 那么任何设备都可以访问Weinre Server。
--verbose [true | false] : 如果想看到更多的关于Weinre运行情况的输出, 那么可以设置这个选项为true, 默认为false;
--debug [true | false] : 这个选项与--verbose类似, 会输出更多的信息。默认为false。
--readTimeout [seconds] : Server发送信息到Target/Client的超时时间, 默认为5s。
--deathTimeout [seconds] : 默认为3倍的readTimeout, 如果页面超过这个时间都没有任何响应, 那么就会断开连接。
更多参数可以访问 http://people.apache.org/~pmuellr/weinre/docs/latest/Running.html
MAC OS X系统更为简便,无须命令行,直接运行app即可启动weinre,后续的步骤和windows相同。
Debug服务端所在的内网IP地址可以在命令提示符中输入ipconfig命令查看

然后我们使用服务端所在IP地址加端口访问:http://本地ip:Port
例如:http://192.8.104.20:8910/,如下图所示


TargetScript
将上图中Target Script部分的js地址加入到你要调试的目标页面内。例如:
<script src="http://192.8.104.20:8910/target/target-script-min.js#anonymous"></script>

然后在移动设备打开添加过这个脚本的网页,例如我的页面放在本地环境并使用端口8888监听,所以在移动端浏览器需要输入:

。并在桌面环境Safari浏览器打开Debug 客户端用户接口。如下图:
http://192.8.104.20:8888/newyear2015/crack.html


如果桌面电脑用USB数据线连接了移动设备,但Debug客户端依然显示为weinre:targetnot connected,如下图所示:


这时你可以尝试以下方法:

  1.  检查是否通过USB数据线连接成功(安装驱动)。
    
  2.  检查Debug客户端桌面环境是否和移动设备处于同一个局域网网段,尤其是WiFi方式上网的情况,一定要防止Wifi自动连接到其他网络中。
    
  3.  尝试将Target Script 脚本放在html文件的尾部。
    
  4.  检查Debug调试客户端用户接口的Client id是否与目标页面内target script 中的client id一致。
    

Target Bookmarklet

使用此方法可以将标签中的代码注入到目标页面代码中。以下是JavaScript代码段:

javascript:(function(e){e.setAttribute("src","http://192.8.104.20::8910/target/target-script-min.js#anonymous");document.getElementsByTagName("body")[0].appendChild(e);})(document.createElement("script"));void(0);

该代码段可以通过在手机端浏览器访问对应的url方式获取。例如这里是:
http://192.8.104.20:8910/target/target-script-min.js
然后保存为设备书签中。
以后如果需要调试页面,打开页面后,点击Debug书签就可以在桌面环境开始调试了。


PhoneGapWebApp调试
PhoneGap WebApp也就是运行在移动设备Webview之内(Android:webview,iOS:uiwebview)的移动应用,因此weinre调试只需要在要调试的目标页面中加入weinre脚本代码即可。
另外可以安装使用GapDebug应用,GapDebug是一款跨平台的移动设备调试工具,支持拖拽式一键安装,支持重启App后Debug状态恢复,支持断点调试,支持Windows和Mac OS系统,官方地址
https://www.genuitec.com/products/gapdebug/

多用户调试
Debug客户端用户接口#号后是一个调试客户端的id,用于在多用户调试时,识别各自不同的调试项目。
在同一局域网的网段内,大家可以共享weinre调试环境。有一台电脑作为Debug服务器,其他成员只需要一个自己的client id就可以在自己的电脑上开始真机调试了。使用方法同上,这里不再赘述。

Debug客户端中调试方法

如果调试设备连接成功,会显示如下状态:

Elements面板


可以修改html和CSS代码,无须刷新页面,即可在目标设备页面上实时预览效果。

Resources面板


包括Databases、Local Storage和Session Storage信息,若目标页面用到了缓存,则可以在此看到数据。

Network面板


由于weinre是基于XMLHttpRequest进行监听的,所以网络面板只显示通过XML HTTPRequest的请求加载的数据,也就是Ajax方式加载的资源。

Timeline面板


Console面板

第三方Weinre服务

技术团队可以按照上述步骤搭建一个本地的weinre调试环境,供团队内部使用。除了自建weinre服务器,也可以使用第三方提供的weinre服务。

目前国外的有PhoneGap提供的weinre远程服务,用户可以访问下述网址参看用户远程调试接口
http://debug.build.phonegap.com/


方法和上面自建weinre服务没什么区别,这里就不多说了。

其他调试工具

除了介绍过的Chrome 远程调试工具DevTools、weinre远程调试,目前的还有Adobe公司推出的跨平台调试工具Adobe Edge Inspect CC,以及国内网易前端工程师@听奏同学开发的iOS系统专用调试工具MIHTool,也是功能很强大的。这里不一一介绍了。

参考文章:
weinre – Running http://people.apache.org/~pmuellr/weinre/docs/latest/Running.html

相关文章
|
6月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
534 4
|
10月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
10月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。
|
10月前
|
JSON 开发框架 自然语言处理
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
本文主要介绍了应用开发中的三大核心内容:生命周期管理、资源限定与访问以及多语言支持。在生命周期部分,详细说明了应用和页面的生命周期函数及其触发时机,帮助开发者更好地掌控应用状态变化。资源限定与访问章节,则聚焦于资源限定词的定义、命名规则及匹配逻辑,并阐述了如何通过 `$r` 引用 JS 模块内的资源。最后,多语言支持部分讲解了如何通过 JSON 文件定义多语言资源,使用 `$t` 和 `$tc` 方法实现简单格式化与单复数格式化,为全球化应用提供便利。
336 104
|
10月前
|
JavaScript 前端开发 API
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
本文介绍了HarmonyOS应用开发中的HML、CSS和JS语法。HML作为标记语言,支持数据绑定、事件处理、列表渲染等功能;CSS用于样式定义,涵盖尺寸单位、样式导入、选择器及伪类等特性;JS实现业务逻辑,包括ES6语法支持、对象属性、数据方法及事件处理。通过具体代码示例,详细解析了页面构建与交互的实现方式,为开发者提供全面的技术指导。
355 104
|
10月前
|
开发框架 编解码 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(一)
该文档详细介绍了一个兼容JS的类Web开发范式的方舟开发框架,涵盖概述、文件组织、js标签配置及app.js等内容。框架采用HML、CSS、JavaScript三段式开发方式,支持单向数据绑定,适合中小型应用开发。文件组织部分说明了目录结构、访问规则和媒体文件格式;js标签配置包括实例名称、页面路由和窗口样式信息;app.js则描述了应用生命周期与对象管理。整体内容旨在帮助开发者快速构建基于方舟框架的应用程序。
366 102
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
2672 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
11月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。