whistle是基於Node實現的跨平臺web調試代理工具,能夠做爲普通的http代理或者用來抓包、修改、操做http、https、websocket、tunnel請求,如:修改hosts、請求方法、響應狀態碼、請求(響應)頭、請求(響應)內容等等,基本上能夠操做web請求的方方面面,並且支持插件擴展功能,本文主要講下如何用whistle調試移動端頁面,安裝及使用whistle等其它內容請參見Github:https://github.com/avwo/whistle。html
相較於PC側,在移動端調試網頁,主要會遇到如下三個問題:前端
console.xxx
輸出的調試日誌通常狀況下,移動端頁面在PC的Chrome瀏覽器上模擬器上進行調試,但並不是全部移動端頁面均可以在PC的模擬器上調試,好比一些須要調用到APP的本地API的APP內嵌頁面,或者測試頁面兼容性問題等,只有在真機上運行才能看到真實效果,這個時候能夠利用whistle,經過簡單配置便可解決上述的前兩個問題(目前沒法經過頁面js獲取頁面的調試信息,暫不支持debug功能,能夠經過 console.log
來代替):linux
console.xxx
輸出的調試日誌whistle內部實現了相似瀏覽器的Console的遠程Log平臺,只需配置簡單的whistle規則便可自動捕獲頁面的錯誤及console輸出的信息,以https://m.baidu.com/爲例,因爲 https://m.baidu.com/
是用https訪問,先在whistle上開啓https攔截,才能對https請求進行抓包及修改,手機須要配置下whistle代理,一切準備就緒後,能夠配置以下規則:git
m.baidu.com log:// # 若是你想同時注入js腳本,能夠用下面一種方式 # 在mac或linux加載本地js文件/User/xxx/test.js # m.baidu.com log:///User/xxx/test.js # 在windows上加載本地js文件D:\xxx\test.js # m.baidu.com log://D:\xxx\test.js # 直接從whistle的Values配置的key-value裏面獲取腳本 # m.baidu.com log://{test.js}
其中,whistle的Values參見:https://avwo.github.io/whistle/webui/values.htmlgithub
咱們用whistle的Values在log裏面注入一個段js,主要用來經過console.error, console.warn, console.log等輸出數據,並模擬一個異常拋出:web
m.baidu.com log://{test.js}
test.js:windows
console.error({ error: true }); console.warn({ error: true, warn: { test: true } }); console.log(123456); // 模擬拋出異常 console.notAFunction('test');
效果以下圖:瀏覽器
whistle集成了weinre的功能,一樣只需配置一條規則便可經過在pc上經過weinre修改網頁的DOM結構及其樣式:微信
m.baidu.com weinre://test
其中,weinre://test 中的
test` 只是做爲weinre的分類,防止一個weinre調試頁面出現太多的鏈接,效果以下圖:websocket
vConsole是微信團隊開發的輕量、可拓展、針對手機網頁的前端開發者調試面板,主要原理是經過在頁面注入js實現模擬PC瀏覽器的Console功能,這邊利用whistle的js協議往指定網頁(https://m.baidu.com/)注入vConsole.js
,配置whistle規則:
m.baidu.com js://{vConsole.js}
效果以下圖:
注意: vConsole和weinre不能同時使用
whistle還有不少應用場景,後續再逐步輸出給你們,瞭解更多內容請訪問whistle的Github:https://github.com/avwo/whistle,有問題或建議歡迎你們提issue或PR。