Chrome開發者工具是Jerry平常工做使用的三大調試器之一。雖然工具名稱前面帶了個"開發者", 可是它對非開發人員仍然有用。不信?javascript
用Chrome打開咱們經常使用的網站,按F12,在Console標籤頁裏看到這些信息,這些都是很老的梗了。html
在網易雲音樂上聽歌,若是想保存到本地,不須要安裝客戶端,直接在Chrome開發者工具裏找到mp3的真實連接便可保存。java
對於在線視頻也能用一樣的方式找到真實地址而後保存到本地。git
前段時間我看到一則新聞,題目是"騙子騙術再高,遇到程序員也折腰",介紹了一位程序員收到詐騙短信後,不只識破了詐騙犯的套路,全程機智應答,設陷下套,一步步將對方引入本身的節奏,最後直接控制了詐騙犯的電腦和攝像頭。程序員
個人這位同行用到的一個方法就是:在上圖Chrome開發者工具的Console面板裏敲入指令document.body.contentEditable='true', 這樣使得整個網頁處於可編輯狀態。而後就能夠爲所欲爲地修改網頁上的內容,好比能夠像下圖這樣作作白日夢:github
使用Chrome的記住密碼功能,時間長了都忘記密碼是什麼了。雖然這些密碼在Chrome設置裏也能找到,但更快捷的方式仍是直接在Chrome開發者工具裏打印出來。正則表達式
在Chrome開發者工具裏點擊Elements標籤,而後點擊網頁上的密碼元素,該元素的實現的html代碼就顯示在標籤頁裏了。這裏咱們能看出該元素的id爲password。chrome
再回到Console標籤,輸入$("#password").value, 便可顯示出密碼。瀏覽器
之前網上有個著名的段子。一位程序猿打開珍愛網想找個對象。瀏覽了幾分鐘網頁,他習慣性地按了F12打開Chrome開發者工具,發現Console標籤打印了幾條錯誤信息,而後就習慣性地開始了調試。網絡
而後,就沒有而後了。。。
下面是一些我平常工做中使用Chrome開發者工具的心得和小技巧,但願對您提升開發和調試的效率能有所幫助。
在Element標籤頁選中某個html標籤,在右鍵菜單裏設置Attributes modifications斷點。下圖意思是一旦title標籤的屬性發生變化,斷點自動觸發。
我曾經處理過一個incident,用戶抱怨在Fiori應用裏作了一些操做以後,頁面的title被修改爲一個錯誤的值。藉助這個屬性斷點功能,我很快找到了title被修改的那行代碼。這個incident的更多細節請參考個人博客:
A quick way to find which code has changed the UI5 application page title by debugging
這種說法其實並不許確,由於咱們沒辦法在Chrome裏查看瀏覽器原生方法的實現代碼,更別提設置斷點了。
其實個人需求是,但願調試的時候,在這些瀏覽器原生方法以某些特殊輸入參數被調用時能停下來。
舉個例子,在我研究Angular框架時,用ng-repeat畫了一個列表,以下圖所示。我發現對於每條列表記錄,最終生成的原生html代碼都有一個註釋元素,以下圖紅色高亮區域顯示。
我很好奇Angular框架是在哪行代碼生成的這三個註釋元素。按照推理,這些註釋確定是經過原生方法createComment建立的,然而我沒法在這個方法裏面設置斷點。若是直接在Angular框架里根據源代碼createComment搜索,而後在全部的搜索結果處設置斷點——這種方法理論上可行,然而效率過低,由於搜索結果有將近100處調用了createComment。
怎麼辦?
(1) 在angular.js文件最開始的地方設置斷點, 打開應用,斷點觸發:
(2) 將瀏覽器原生的方法實現保存在變量oldFn裏,而後重寫createComment。在重寫的版本里,加上我本身的判斷邏輯:我指望只有當建立的comment文本包含ngRepeat時,斷點才觸發。實現以下圖所示。在console裏執行下圖代碼,完成對createComment原始實現的覆蓋。
而後在調試器裏繼續執行,最終斷點在我想要找的位置觸發:
這就是我要尋找的Angular框架建立包含ngRepeat註釋的代碼位置:
在Chrome地址欄裏輸入chrome://開頭的一系列命令能夠實現各類各樣的功能。不過我平常工做用得最多的是chrome://net-internals。
在SAP成都Revenue Cloud開發團隊Wang Cong的幫助下,我使用這個功能解開了困擾過我一段時間的關於JavaScript source code map的謎團。
我把如何經過chrome://net-internals研究JavaScript source code map的過程寫在了這三篇博客裏:
(1) A debugging issue caused by source code mapping
(2) UI5 Source code map機制的細節介紹
(3) Useful Chrome Tool chrome://net-internals to monitor http request detail
我在SAP處理Fiori應用的incident時常常須要這個功能:好比調試Fiori應用的先後臺交互,我想把後臺返回的JSON響應另存成一個本地文件。固然我能夠在Chrome開發者工具的network標籤頁手動選中響應內容,而後Ctrl C,再到本地新建一個文件,Ctrl V。我嫌這個步驟麻煩,在這篇博客上找到了另外一種快捷的作法。
直接在console裏執行這段代碼:
這段代碼會給console對象注入一個新方法save, 接下來就能使用console.save(<variable name>, <local file name>)將任意變量保存成本地文件,很是方便。
這種類型的分析經過Profiles這個標籤頁完成。詳細說明參考個人博客:
An example of using Chrome Development Tool to analyze JavaScript garbage collector
想知道這種toString方法具體是怎麼實現的麼?
您得在Chrome開發者工具裏打開選項Show native functions in JS profile,而後查看個人博客:
Use Chrome development tool to do self-study on some JavaScript function native implementation
當我處理一些很是棘手的複雜問題時,常用到這個彩色打印的技巧。
我曾經處理過一個incident,UI上顯示的列表一次從後臺讀取20條記錄,其中有一條記錄的guid和其實際內容不匹配。我須要找到到底是20條記錄裏的哪一條記錄有錯。若是用調試的方式,我設置斷點的函數在循環裏被調用,斷點會不斷被觸發。我以爲很不耐煩,就採用了console.log的方式,打印每條記錄的guid和詳細內容。當我觀察這些打印輸出時,發現它們被淹沒在了UI5框架大量的log裏。由於我查看本身打印的log的同時,也須要結合UI5打印的log做爲上下文來分析,所以我不能在Console標籤頁裏使用過濾的功能來使得只有我本身打印的log被顯示出來。
有什麼辦法能讓我本身打印的log不會淹沒在UI5框架海量的log裏呢?辦法就是使其成爲「萬花叢中一點綠"。
採用下列自定義函數myLog輸出的日誌,在console裏顯示的效果以下:
能夠顯示得再花哨一點:
好比我想快速知道當前UI一共有多少個button元素,並查看某些元素的詳情。採用類jQuery選擇器的語法$('button')即返回全部button元素。
還有其餘不少小技巧,以及我最經常使用的快捷鍵組合,由於篇幅限制再也不贅述,您能夠在個人這篇博客裏找到我使用Chrome開發者工具的所有技巧。
Chrome Development Tool tips used in my daily work
注:Chrome開發者工具顏色的修改:
但願這篇文章能讓您對Chrome開發者工具備一些更深刻的瞭解,感謝閱讀。