移動端Web開發調試之Weinre調試教程

原文地址: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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 部分瀏覽器遠程調試 各個瀏覽器遠程調試及其所用工具如下表所示: ADB 在使用firefox和UC瀏覽器調試時,需...
    溪離欣洛閱讀 2,086評論 0 4
  • 隨著手機等移動設備的普及,適配移動端的頁面變得越來越有必要。這也意味著移動端的調試變得越來越頻繁,那么就會發生以下...
    木白no1閱讀 3,524評論 0 5
  • 文/ 陳皓 在邊防連隊滿山是各色鮮艷嬌美的花兒,可我最喜愛的還是潔素無華的牽?;?、太陽花。 太陽花在前面...
    沂蒙文學閱讀 517評論 9 10
  • 我喜歡信仰這個詞 我喜歡以撒,約瑟,和英雄的摩西 因為純凈,因為信仰 因為苦難中的剛強 如果人心飄揚淡雅,沒有信仰...
    帶走我的xz閱讀 365評論 0 3
  • 今天去千峰勘察了下路線和教學情況,路上基本要花1個半小時,在優秀學員畢業展示上看到很多信息和學院照片都是假的,感覺...
    阿元閱讀 119評論 0 0