移动端网站页面调试的一些经验分享

所属分类: 网站运营 / 建站经验 阅读数: 80
收藏 0 赞 0 分享

把静态资源指向到本地
Mobile 越来越重要,Hybrid App 越来越流行,在手机上进行网页的调试却并不像电脑上那么容易。大约半年前,我开始转向 Mobile Web 的开发,在调试方面做了不少的尝试,近期慢慢分享给大家。

开发过程离不开调试,特别是做前端开发,几乎是一边调试一边开发。

做调试的第一步:让浏览器/webview直接请求你本地的源码

PC 端的经验
如何实现目标?相信大家在做 PC Web 开发时,有接触过以下一些解决方案:

编辑本地的 hosts 文件,把静态资源的域名指向到本地,在本地搭建静态资源 HTTP 服务器,使浏览器直接载入本地的源码。
在本地搭建一个代理服务器,设置浏览器的代理到这个代理服务器,在代理服务器中根据规则直接读取本地的源码返回给浏览器。例如有 nproxy 可以满足此类需求。
使用 Fiddler 的 AutoResponder 的功能。这个方法实际上和上一个是同样的,Fiddler 是一个非常强大并且免费的 GUI 工具,很容易上手。
使用模块加载器提供的 debug 功能来做线上资源到本地资源的映射,例如 seajs-debug 。
这些方式要完成的任务都是:让浏览器直接请求你本地的源码。

只要做到了这一点,我们就可以在编辑器里改完代码,刷新浏览器立即看到改动后的效果,避免了部署代码的繁琐操作。

移动端的方案
在移动端,应该怎么做呢?

无非要实现同样的目标:让手机浏览器/webview 直接载入我们工作电脑上的源码 。我们先看看 PC 上的这几种常用方式在手机上是否还适用。

编辑 hosts 的方案

在 PC 上编辑 hosts 文件的时候,大家应该注意过,在 WIN7/8 系统上,需要管理员权限,在 Mac/Linux 下,需要 root 权限。这确实是一个很安全敏感的文件。所以在手机上,要想编辑这些文件同样需要 root 权限。这就意味着 iOS 需要越狱,Android 需要 root 。我认为这个方案在手机上不可取,在手机上编辑 hosts 困难重重,你还不能保证你的每台开发机都有 root 权限,调试兼容性的时候,遇到无法 root 的机器怎么办?

使用代理的方案(包括自建 proxy server 和 使用 fiddler)

在 iOS 上配置系统的 HTTP 代理服务器是非常容易的,大部分 Android 机也可以配置,只是不同机型配置菜单的位置不一样。剩下要做的,就是和在 PC 上一样了,配置规则来把某些文件代理到本地。

使用这个方案可能会遇到的问题是:自建的 proxy server 一般对 HTTPS 的兼容不够好,对于 Hybrid App ,可能 native 部分有些请求是 HTTPS 的,webview 里的页面是 HTTP 的。设置了 HTTP Proxy 后,所有的请求都要经过这个代理服务器,如果对 HTTPS 的支持不够好,可能出现无法登录等情况发生。这点要赞 Fiddler 一下,处理的非常好。

另外 Mac 用户可能没有太好的 Fiddler 的替代品,Charles 是收费的,而且没 Fiddler 好用。

使用模块加载器提供的 debug 功能

一般需要在页面上输入一些东西来完成资源映射。在手机上输入文字太麻烦了,而且屏幕太小,不太好展示这些内容,所以这个方案也不好。

综上所述,使用代理服务器的方案是可以从 PC 端沿用到移动端的。

但是上面我们也讲了,使用代理服务器也有一些缺点,那能不能在手机上无痛的实现绑定 hosts 的效果呢?答案是可以的。我们绑定 hosts 只是改变了域名的解析结果,正常情况下,域名是由谁来解析的呢?DNS !

自定义 DNS 的方案
我们只需要在开发电脑上运行一个特殊的 DNS 服务器,然后把手机网络配置里的 DNS 改成开发电脑的 IP 。我们在 DNS 服务器里做一些手脚,把静态资源的域名解析到开发电脑上,就可以实现和编辑 hosts 文件一模一样的效果了。

而在手机上修改 DNS 服务器地址,是非常容易的,比修改代理服务器还要通用。

为了实现这些,我写了一个非常方便配置的 DNS Server : xdns , 兼容 hosts 文件的语法,同时提供了比 hosts 文件更高级的语法。

比如,xdns 支持域名使用通配符的模式。支持 IP 地址用网卡接口名来作为占位符,运行时可以自动替换成该网卡接口上的 IPv4 地址,这样当你的开发电脑 IP 变了后就不需要修改配置文件。

安装和启动都非常方便,使用 Node.js 开发,Node 对于前端来说应该很熟悉。npm 安装后,一个命令就可以启动。具体请看文档:xdns

远程调试
PC 端的经验
在使用桌面浏览器开发时,几乎每种浏览器都有自己的开发者工具,比如大家常用的 firebug , chrome develper tools , safari developer tools . 哪怕是 IE 甚至 IE6,也有自己的开发者工具。我们利用这些工具来检查调试样式、javascript,查看修改 cookie , 查看网络请求 等等。这些大家都非常熟悉了。

移动端的方案
手机端的浏览器或者 webview 不可能在手机上集成一个 developer tools ,因为屏幕太小。好在各大厂商还是很关注开发者的便利性的,现在有多种远程调试的方案。也就是在手机上加载页面,在电脑上来展示调试工具。下面我们看看目前主流的一些工具。

iOS 平台

1.Safari Mobile

safari 支持远程调试,需要做如下的几步:

在手机里找到 设置 -> safari -> 高级 -> Web 检查器 ,打开此功能。
用数据线连接到你的 Mac(没有 Mac ? 找老板要去!)。
打开 Mac 下的 safari , 到偏好设置里,高级一栏最下部,勾选在菜单栏中显示“开发”菜单
用手机 safari 访问一个网页,在Mac上的 safari 开发菜单里找到你的手机,二级菜单里找到这个网页
做完这些,我们就进入了熟悉的 safari developer tools ,调试 css , js 网络请求等。

2.iOS webview

iOS APP 里的 webview 同样支持远程调试,不过限制更多一点。这个 APP 必须是自己编译安装进手机的,也就是你必须要有 iOS 开发者账号。对于做 Hybrid APP 开发的来说,这不是什么难事,团队肯定有开发者账号。你需要做的是了解一点 iOS 开发基础,起码能自助把代码编译安装到你的手机。

对于自己编译进去的 APP ,只需要在 APP 里载入你要调试的页面,其他步骤和 safari 的远程调试一样。

Android 平台

1.Chrome Mobile

Chrome for android 32 以及之后的版本具有远程调试的功能,你需要做的是:

开启 Android 的 USB 调试功能。
用 USB 先连接到你的电脑(windows 用户需要安装 Android 驱动)。
在 Chrome for android 上打开你要调试的网页。
在电脑上打开 chrome (同样最低需要 32 版本),进入 菜单 -> 工具 -> 检查设备 页面,确保 Discover USB devices 被勾选
如果设置正确的话,现在就可以看到你手机上打开的页面了,点击 inspect 进入我们熟悉的 Chrome develper tools 。

由于 Android 手机各种各样,如果遇到麻烦,请仔细阅读 官方文档

2.Android Webview

Android 4.4 开始,默认的浏览器已经是 chrome 了,所以 webview 也是 chrome 了,这就给了 webview 远程调试的能力。我们需要在 Android 里针对 Webview 做以下设置:

Java Code复制内容到剪贴板
  1. if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {   
  2.     WebView.setWebContentsDebuggingEnabled(true);   
  3. }   

然后在你的 App 里打开要调试的页面,其余步骤和使用 Chrome for Android 一样,进行远程调试。

3.使用 Android 模拟器

鉴于目前 Android 4.4 的手机还比较少,你可以选择使用模拟器来进行调试。官方的模拟器太慢,推荐大家使用 genymotion , X86 架构的模拟器,速度和真机没什么两样了。对于只做 webview 调试的前端来说,只需要使用个人免费版就可以了。

4.其他方式

如果你的调试条件不能满足上面讲的任何一种,还可以使用 weinre 。只需要在页面里插入一段脚本,就可以进行远程调试,基本没其他限制。但是使用这个也是有明显的缺点的:

不能给 javascript 打断点,基本只能用 console 来调试
不支持查看元素的样式是写在 css 第几行,也不支持显示在哪个文件
由于是通过网络来连接的,所以在调试移动网络的情况时,不好操作(需要服务端运行在一个移动网络可以访问到的机器上)
总之,weinre 仅仅适用于你没办法使用 Safari 或者 Chrome 进行远程调试的情况下,聊胜于无,调试 Android hybrid APP 时,经常会遇到这个情况。

总结

综上所述,可以根据下图来选择最优的调试方案:
20165492757800.png (804×616)

由于我目前只接触了 iOS 和 Android 平台的开发调试,其他的移动平台不了解,所以本文没涉及到 windows phone 等平台。欢迎大家留言或者 email 交流各种远程调试方案。

更多精彩内容其他人还在看

对7种博客赚钱方法的一些思考 最信赖Adsense

其实我并不喜欢互联网中什么CPA、CPC、CPM等博客赚钱方法,直到现在我博客也只挂了个Google Adsense,心里一直认为这种按点击、按展示量付款的模式不靠谱
收藏 0 赞 0 分享

浅谈地方站运营的三大法宝

本人在2000开始接触网站制作了,只是在业余时间搞的玩,只是懂一点简单的制作,对网站的运营也是2005年后开始接触的。
收藏 0 赞 0 分享

做网站6年的一些个人经验之谈

我是一个地地道道的菜鸟,不懂程序,可以说头脑是一片空白,但是我对做站有浓厚的兴趣。刚开始,我通过自助做站结识了建网站,由免费到申请了一个90元一年的空间。
收藏 0 赞 0 分享

每个网页设计者都自以为是

网页技术更新很快,一个网站的界面设计寿命仅仅2-3年而已。不管是垃圾还是精品,都没有所谓的经典。
收藏 0 赞 0 分享

中国草根站长心理分析之一二三

从我踏入站长圈那天起我就在分析每个我所认识的站长的性格,也渐渐积累了一些自己的看法。
收藏 0 赞 0 分享

个人站长生存学 垃圾站解决生存问题

很难想像在如今这个资本为王的社会,个人站长这个群体仍然坚强地站立着,成为这个互联网的有力组成部分。他们没有雄厚的资金,也没有非常高端的技术,但是他们也确实依靠自己的网站养家糊口,单打独斗自有自己的一套生存学。
收藏 0 赞 0 分享

网站更换域名对网站带来的影响及补救措施完美小结

更换域名,通常情况下网站是需要承受着搜索引擎带来的很大风险的,作者通过自己的亲身经历,总结出了能尽可能将风险降到最小的办法,有需要的朋友可以尝试下。
收藏 0 赞 0 分享

个人站长怎样选择做站

做站是为了赚钱,我相信没人会反对,网站有了流量,才能赚钱,本篇文章将为大家介绍做站方向的取舍,使流量来的快,竞争小。
收藏 0 赞 0 分享

网站的成败往往决定于小细节

今天我们就谈一下新手站长可能会犯的错误,看看哪些是你曾做过的,看了这些希望你能豁然开朗。
收藏 0 赞 0 分享

新网站初期需要注意的一些技术问题小结

对互联网有了解的人都有自己的想法,有人就把想法付诸实现,做个网站然后开始运营。
收藏 0 赞 0 分享
查看更多