Chrome(谷歌)浏览器调试教程珍藏版
前言
鳴謝殷老師,非常優秀的學習資料,分享給大家,希望對大家有幫助!引言
在web開發過程中,我們在寫JavaScript腳本時難免會遇到各種bug,這時,我們就需要去調試我們的JavaScript腳本,然后去修改代碼。最簡單的調試方法就是使用alert方法,將可信息通過alert方法的彈窗顯示出來。但是,alert方法有幾個弊端:
1)alert方法在彈出窗口時會中斷程序;
2)在循環中使用alert()方法時,如果不點擊alert彈窗的確定按鈕,下一個alert就不會出現;
3)alert方法在顯示對象時永遠只顯示[Object],無法看到對象中的具體細節;
正是由于alert方法存在上述缺點導致了alert方法只適合一些小程序。如果想要查看JavaScript腳本的執行過程,HTTP請求信息,執行過程中的數據信息則需要學會使用瀏覽器的開發者工具進行調試。
學習目標:
1.Chrome瀏覽器簡介及下載與安裝(了解);
2.瀏覽器加載Html頁面的過程(了解);
3.Chrome瀏覽器開發者工具面板的介紹(熟悉);
4.使用Chrome開發者工具調試JavaScript腳本(掌握);
5.Chrome瀏覽器的其他設置(了解);
1.瀏覽器簡介
瀏覽器界面:
瀏覽器的用戶界面有很多彼此相同的元素,其中包括:
用來輸入 URI 的地址欄
前進和后退按鈕
書簽設置選項
用于刷新和停止加載當前文檔的刷新和停止按鈕
用于返回主頁的主頁按鈕
瀏覽器的主要功能:
瀏覽器的主要功能就是向服務器發出請求,在瀏覽器窗口中展示您選擇的網絡資源。這里所說的資源一般是指 HTML 文檔,也可以是 PDF、圖片或其他的類型。資源的位置由用戶使用 URI(統一資源標示符)指定。
瀏覽器解釋并顯示 HTML 文件的方式是在 HTML 和 CSS 規范中指定的。這些規范由網絡標準化組織 W3C(萬維網聯盟)進行維護。 多年以來,各瀏覽器都沒有完全遵從這些規范,同時還在開發自己獨有的擴展程序,這給網絡開發人員帶來了嚴重的兼容性問題。如今,大多數的瀏覽器都是或多或少地遵從規范。
簡而言之,就是一個獲取網頁,并將它顯示給用戶的工具。
瀏覽器的高層結構
瀏覽器的主要組件為:
用戶界面 - 包括地址欄、前進/后退按鈕、書簽菜單等。除了瀏覽器主窗口顯示的您請求的頁面外,其他顯示的各個部分都屬于用戶界面。
瀏覽器引擎 - 在用戶界面和呈現引擎之間傳送指令。
呈現引擎 - 負責顯示請求的內容。如果請求的內容是 HTML,它就負責解析 HTML 和 CSS 內容,并將解析后的內容顯示在屏幕上。
網絡 - 用于網絡調用,比如 HTTP 請求。其接口與平臺無關,并為所有平臺提供底層實現。
用戶界面后端 - 用于繪制基本的窗口小部件,比如組合框和窗口。其公開了與平臺無關的通用接口,而在底層使用操作系統的用戶界面方法。
JavaScript 解釋器-用于解析和執行 JavaScript 代碼。
數據存儲-這是持久層。瀏覽器需要在硬盤上保存各種數據,例如 Cookie。新的 HTML 規范 (HTML5) 定義了“網絡數據庫”,這是一個完整(但是輕便)的瀏覽器內數據庫。
我們這里談到的瀏覽器:
目前使用的主流瀏覽器有五個:Internet Explorer、Firefox、Safari、Chrome 瀏覽器和 Opera。本文中以開放源代碼瀏覽器為例,即 Firefox、Chrome 瀏覽器和 Safari(部分開源)。根據 StatCounter 瀏覽器統計數據,目前(2011 年 8 月)Firefox、Safari 和 Chrome 瀏覽器的總市場占有率將近 60%。由此可見,如今開放源代碼瀏覽器在瀏覽器市場中占據了非常堅實的部分。
1.1下載與安裝
下載地址:http://www.google.cn/intl/zh-CN/chrome/browser/desktop/index.html
安裝:傻瓜式的安裝,一路點擊下一步。
2.瀏覽器加載Html頁面的過程
2.1 從輸入URL到頁面加載完成都發生了什么?
1.處理URL
輸入 URL 后的「回車」,這時瀏覽器會對 URL 進行檢查,首先判斷協議,如果是 http 就按照 Web 來處理,另外還會對這個 URL 進行安全檢查,然后直接調用瀏覽器內核中的對應方法,比如 WebView 中的 loadUrl 方法。
2.發送HTTP請求
因為網絡的底層實現是和內核相關的,所以這一部分需要針對不同平臺進行處理,從應用層角度看主要做兩件事情:通過 DNS 查詢 IP、通過 Socket 發送數據,接下來就分別介紹這兩方面的內容。
2.1 DNS查詢
Chrome瀏覽器在啟動的時候首先會去加載你本地的host文件,如果URL中的域名在host文件中設置的有對應的IP地址,就會直接將這個域名指向這個地址。如果host中沒有URL中輸入的域名(www.baidu.com)對應的IP地址,瀏覽器就會去訪問DNS服務器,向DNS服務器詢問這個域名(www.baidu.com)對應的IP地址。
2.2 通過Socket發送數據
有了 IP 地址,就可以通過 Socket API 來發送數據了,這時可以選擇 TCP/IP 或 UDP 協議,HTTP 常用的是 TCP/IP 協議。Chrome此時就會使用TCP/IP傳輸協議,將URL中的信息通過HTTP協議發送到百度的服務器。
3.瀏覽器接受遠程服務器響應的數據
遠程服務器(百度的服務器)一般會返回給瀏覽器一個HTML(字節碼數據)。瀏覽器接受到數據之后就對這些字節碼數據以指定的編碼格式進行解碼。瀏覽器獲取編碼格式的途徑:
1)用戶設置,在瀏覽器中可以指定頁面編碼
2)HTTP 協議中
3)HTML頁面中 的 charset 屬性值
4.瀏覽器對HTML頁面進行渲染和布局
1).瀏覽器開始載入html代碼,發現<head>標簽內有一個<link>標簽引用外部CSS文件;
2).瀏覽器又發出CSS文件的請求,服務器返回這個CSS文件;
3).瀏覽器繼續載入html中<body>部分的代碼,并且CSS文件已經拿到手了,可以開始渲染頁面了;
4).瀏覽器在代碼中發現一個<img>標簽引用了一張圖片,向服務器發出請求。此時瀏覽器不會等到圖片下載完,而是繼續渲染后面的代碼;服務器返回圖片文件,由于圖片占用了一定面積,影響了后面段落的排布,因此瀏覽器需要回過頭來重新渲染這部分代碼;
5).瀏覽器發現了一個包含一行Javascript代碼的<script>標簽,趕快運行它;
6).Javascript腳本執行了這條語句,它命令瀏覽器隱藏掉代碼中的某個<div> (style.display=”none”)。杯具啊,突然就少了這么一個元素,瀏覽器不得不重新渲染這部分代碼;
7).終于等到了</html>的到來,瀏覽器淚流滿面……
8).等等,還沒完,用戶點了一下界面中的“換膚”按鈕,Javascript讓瀏覽器換了一下<link>標簽的CSS路徑;
9).瀏覽器召集了在座的各位<div><span><ul><li>們,“大伙兒收拾收拾行李,咱得重新來過……”,瀏覽器向服務器請求了新的CSS文件,重新渲染頁面。
注:win10打開host文件的方法:在運行(win+R)中輸入:C:\Windows\System32\drivers\etc即可
2.2 JavaScript引擎
2.2.1 JavaScript引擎是什么?
? “JavaScript引擎”通常被稱作一種 虛擬機。“虛擬機”是指軟件驅動的給定的計算機系統的模擬器。有很多類型的虛擬機,它們根據自己在多大程度上精確地模擬或代替真實的物理機器來分類。
?
2.2.2 JavaScript引擎是干什么的?
JavaScript的基本工作就是將開發者寫的JavaScript代碼轉換成能被瀏覽器理解甚至能在應用程序上運用的最優化的快捷代碼。比方說,當你寫了 var a = 1 + 1; 這樣一段代碼,JavaScript引擎做的事情就是看懂(解析)你這段代碼,并且將a的值變為2。
2.2.3 主要的JavaScript引擎有哪些?
WebKit的JavaScriptCore 和 Google 的 V8 引擎。
2.2.4 JavaScriptCore和V8引擎解析源代碼的過程
JavaScriptCore 執行 一系列步驟 來解釋和優化腳本:
1)首先它進行詞法分析,就是將源代碼分解成一系列具有明確含義的符號或字符串。
2) 然后用語法分析器分析這些符號,將其構建成語法樹。
3)接著四個 JIT(Just-In-Time)進程開始參與進來,分析和執行解析器所生成的字節碼。
簡單來說,JavaScript 引擎會加載你的源代碼,把它分解成字符串(又叫做分詞),再 把這些字符串轉換 成編譯器可以理解的字節碼,然后執行這些字節碼。
Google 的 V8 引擎 是用 C++ 編寫的,它也能夠編譯并執行 JavaScript 源代碼、處理內存分配和垃圾回收。它被設計成由兩個編譯器組成,可以把源碼直接編譯成機器碼:
如果 Crankshaft 確定需要優化的代碼是由 Full-codegen 生成的未優化代碼,它就會取代 Full-codegen,這個過程叫做“crankshafting”。
一旦編譯過程中產生了機器代碼,引擎就會向瀏覽器暴露所有的數據類型、操作符、對象、在 ECMA 標準中指定的函數、或任何運行時需要使用的東西,NativeScript 就是如此。
3.Chrome瀏覽器的開發者工具面板介紹
3.1 Chrome瀏覽器開發者工具的打開方式:
? 1)功能鍵F12或者Ctrl+Shift+j或者Ctrl+Shift+j打開;
? 2)打開瀏覽器右上角用戶設置下拉菜單,選擇更多工具,再選擇開發者工具即可打開開發者工具。
?
3.2 開發者工具的工具欄中常用面板介紹
Elements:查找網頁源代碼HTML中的任一元素,手動修改任一元素的屬性和樣式且能實時在瀏覽器里面得到反饋。
Console:記錄開發者開發過程中的日志信息,且可以作為與JS進行交互的命令行Shell。
Sources: Sources功能面板是資源面板,他主要分為四個部分,四個部分并不是獨立的,他們互相關聯,互動共同實現一個重要的功能:監控js在執行期的活動。簡單來說就是斷點啦。
Network:從發起網頁頁面請求Request后分析HTTP請求后得到的各個請求資源信息(包括狀態、資源類型、大小、所用時間等),可以根據這個進行網絡性能優化。
Timeline:記錄并分析在網站的生命周期內所發生的各類事件,以此可以提高網頁的運行時間的性能。
Profiles:如果你需要Timeline所能提供的更多信息時,可以嘗試一下Profiles,比如記錄JS CPU執行時間細節、顯示JS對象和相關的DOM節點的內存消耗、記錄內存的分配細節。
Application:記錄網站加載的所有資源信息,包括存儲數據(Local Storage、Session Storage、IndexedDB、Web SQL、Cookies)、緩存數據、字體、圖片、腳本、樣式表等。
Security:判斷當前網頁是否安全。
Audits:對當前網頁進行網絡利用情況、網頁性能方面的診斷,并給出一些優化建議。比如列出所有沒有用到的CSS文件等。
3.2.1 元素(Element)面板
Element面板打開方式:
1)打開開發者工具后選擇開發者工具面板中的Element頁簽;
2)打開瀏覽器之后,鼠標右鍵檢查 (火狐瀏覽器是” 審查元素”)
Element面板的常用功能:
1)實時編輯DOM節點
在Element面板的DOM樹視圖中.呈現出了當前頁面中的所有的DOM節點.鼠標雙擊任何DOM節點都可以修改其中的屬性值,修改完成之后按回車鍵瀏覽器會立即顯示出修改后的效果.
注意:這種及時的修改只是臨時的修改,只能做調試用,實際應用中往往是調試結束后再將正確的屬性值在本地代碼中修改.
2)實時編輯CSS樣式
在Element面板中也可以對當前頁面的DOM元素的樣式進行實時的修改,修改后元素的樣式立即生效.
實時修改某一DOM元素的樣式的操作步驟:
首先選中這個DOM元素.如果沒有打開開發者工具,可以在要修改的DOM元素上右鍵–>審查元素,然后選擇控制面板右側的Style即可看到當前DOM元素的所有CSS樣式,雙擊其中的CSS屬性值就可以修改,修改后馬上生效.如果已經打開了開發者工具,可以通過先點擊開發者工具面板最左側的放大鏡,然后再去點擊頁面上要修改的DOM元素選中這個要調試的DOM元素.此時控制面板右側的Style中就呈現出了當前選中的DOM元素的CSS屬性雙擊屬性值即可修改.
注意:這種及時的修改只是臨時的修改,只能做調試用,實際應用中往往是調試結束后再將正確的屬性值在本地代碼中修改.
3)打開盒子模型,調試邊框參數
點擊右側的Computed頁簽可以看到當前選中的元素的盒子模型參數,所有的值都是可以修改的.點擊不同的位置(top,bottom,left,right)就可以修改元素的padding,border,margin屬性值.也可以通過修改盒子模型中間的數據改變元素的width和height.修改的時候瀏覽器中的當前元素會響應地變化,同時在左側Element面板中會自動添加上響應的Stylt屬性值.當頁面上顯示的樣式符合要求之后,即可停止修改,然后將Element中生成的屬性值復制到代碼中,樣式即可永久修改.
3.2.2 控制臺(Console) 面板
1)查看腳本運行過程中的異常信息;
由于JavaScript屬于弱語言類型,語法要求不嚴謹.并且JavaScript是解釋型語言,在代碼中輸入中文的標點等錯誤也不會有提示,只有運行結束后才會拋出異常信息到控制臺.
如果想查看具體的異常信息,直接點擊右邊的異常信息控制臺將會把我們帶到程序中錯誤出現的具體位置:
2)打印日志信息;
上邊說到了簡單的調試可以使用alert方法將想要看到的信息顯示在彈窗中。但是alert存在弊端:阻斷程序運行,不能顯示對象的細節信息,彈出多個信息時必須點擊確定才能看到下一個彈窗的信息。這些問題使用console提供的打印日志的方法可以完美解決。
Console常用的打印日志的方法有:
A)console.log(“info”)顯示一般的基本日志信息,當要顯示的基本日志信息太多時,可以使用console.grop()方法將日志分組;
B)Console.warn(“info”)顯示帶有黃色小圖標的警告信息;
C)Console.error(“info”)顯示帶有紅色小圖標的錯誤信息;
Console打印日志的使用場景:
A)在代碼中使用console.log()打印日志信息:
B)直接在控制臺上使用console.log()打印信息:
C)清除控制臺中信息的方法:
直接在控制臺上輸出console.clear()方法人后回車即可清除控制臺上的信息。還有一種方法是直接點擊控制臺左上方的清除日志的按鈕清除日志信息。
3)運行JavaScript腳本
控制臺還有一個神奇的功能就是可以運行你輸入的JavaScript腳本,這一點非常實用。
實用場景一:快速驗證JavaScript中的方法。
將一個小數按照輸出,要求:只保留兩位小數。通過查JavaScript的API得知Number對象有一個toFixed方法可以指定小數位的長度,但是又沒有例子,最快的嘗試方法就是在控制臺上驗證:
console.log(new Number(“3.1415926”).toFixed(2));
實用場景二:控制臺中輸入JavaScript方法時有提示。
通過document獲取指定id的節點的方法是document.getElementById(“id”)但是因為MyEclipse,Eclipse中在寫JavaScript時可能沒提示,自己寫太痛苦而且還容易寫錯。這時,就可以在控制臺上通過方法提示來補全這個方法。
如上圖:我們不需要完整輸入方法名,根據提示使用鍵盤的上,下鍵選擇需要的方法然后回車即可。
D)Console面板中的全局搜索(快捷鍵Ctrl+Shift+F)
打開全局搜索,輸入關鍵字,能夠搜索到包含這個關鍵字的所有的文件。
應用場景:剛到一個公司,對公司的業務不熟。登錄頁面有幾千行代碼,我只想找到登錄的那個方法。這時,輸入登錄方法名就能搜索到登錄登錄方法所在的頁面。點擊進去就能夠定位到這個方法了。
3.2.3 資源(Source) 面板
Source資源面板中顯示加載當前頁面需要的所有資源。
在Source面板中可以找到當前瀏覽器加載的頁面,然后對其中的JavaScript腳本進行斷點調試。Chrome開發者工具使用中會具體說明。
3.2.4 網絡(NetWork) 面板
NetWork面板可以記錄頁面上的網絡請求的詳細信息,從發起網頁請求Request后分析HTTP請求后得到的各個請求資源信息(包括狀態,資源信息,大小,所用時間,Request和Response等),可以根據這個進行網絡性能優化。
1.Controls 控制Network的外觀和功能。
2.Filters 控制Requests Table具體顯示哪些內容。
3.Overview 顯示獲取到資源的時間軸信息。
4.Requests Table 按資源獲取的前后順序顯示所有獲取到的資源信息,點擊資源名可以查看該資源的詳細信息。
5.Summary 顯示總的請求數、數據傳輸量、加載時間信息。
NetWork面板的Requests Table 包含著HTTP請求和響應的具體信息,是比較常用的一塊
- Name 資源名稱,點擊名稱可以查看資源的詳情情況,包括Headers、Preview、Response、Cookies、Timing。
- Status HTTP狀態碼。
- Type 請求的資源MIME類型。
- Initiator 標記請求是由哪個對象或進程發起的(請求源)。
- Parser: 請求由Chrome的HTML解析器時發起的。
- Redirect:請求是由HTTP頁面重定向發起的。
Script:請求是由Script腳本發起的。 - Other:請求是由其他進程發起的,比如用戶點擊一個鏈接跳轉到另一個頁面或者在地址欄輸入URL地址。
- Size 從服務器下載的文件和請求的資源大小。如果是從緩存中取得的資源則該列會顯示(from cache)
- Time 請求或下載的時間,從發起Request到獲取到Response所用的總時間。
- Timeline 顯示所有網絡請求的可視化瀑布流(時間狀態軸),點擊時間軸,可以查看該請求的詳細信息,點擊列頭則可以根據指定的字段可以排序。
查看具體資源的詳情
通過點擊某個資源的Name可以查看該資源的詳細信息,根據選擇的資源類型顯示的信息也不太一樣,可能包括如下Tab信息:
- Headers 該資源的HTTP頭信息。
- Preview 根據你所選擇的資源類型(JSON、圖片、文本)顯示相應的預覽。
- Response 顯示HTTP的Response信息。
- Cookies 顯示資源HTTP的Request和Response過程中的Cookies信息。
- Timing 顯示資源在整個請求生命周期過程中各部分花費的時間。
針對上面4個Tab進行詳細講解一下各個功能:
① 查看資源HTTP頭信息
在Headers標簽里面可以看到HTTP Request URL、HTTP Method、Status Code、Remote Address等基本信息和詳細的Response Headers
、Request Headers以及Query String Parameters或者Form Data等信息。
預覽響應數據
③ 查看資源HTTP的Response信息
在Response標簽里面可根據選擇的資源類型(JSON、圖片、文本、JS、CSS)顯示相應資源的Response響應內容。下圖顯示的是當選擇的資源是CSS格式時的響應內容。
④ 查看資源Cookies信息
如果選擇的資源在Request和Response過程中存在Cookies信息,則Cookies標簽會自動顯示出來,在里面可以查看所有的Cookies信息。
4.Chrome開發者工具之斷點調試
4.1 JavaScript腳本斷點調試
第一步:打開開發者工具,按F12或者在瀏覽器頁面上右鍵選擇檢查。
第二步:在Source面板中找到需要調試的文件。
第三步:設置斷點。
第四步:觸發調試部分程序的運行,開始調試。
調試過程中常用的按鈕及快捷鍵:
跳到下一個斷點:點擊Sources面板右側的“三角按鈕”
快捷鍵:F8
Ctrl+
跳到下一步(逐步跨方法):點擊Sources面板右側的第二個按鈕
快捷鍵:F10
Ctrl+’
跳進斷點處的方法中:點擊Sources面板右側第三個按鈕
快捷鍵:F11
Ctrl+;
跳出正在執行的方法:點擊Sources面板右側第四個按鈕
快捷鍵:Shift+F11
Ctrl+Shift+;
禁用斷點:點擊Sources面板右側的第五個按鈕
暫停在捕獲到的異常處:點擊Sources面板右側的第六個按鈕,然后勾選Pause On Caught Exception
暫停在未捕獲的異常處:點擊Sources右側的第六個按鈕,不勾選Pause On Caught Exception.
Sources面板調試過程中快捷鍵預覽:
查看斷點處,獲取的數據的值:
將鼠標光標停留在變量上面即可,也可以將變量賦值到Console的控制臺上打印出來。
?
清除斷點:
在Source面板最右側面板中,找到Breakpoints打開,可以看到你打的斷點。在斷點列表出右鍵選擇Remove all breakpoints可以一次性刪除所有斷點。
4.2 XHR斷點調試
右側調試區有一個 XHR Breakpoints,點擊+ 并輸入 URL 包含的字符串即可監聽該 URL 的 Ajax 請求,輸入內容就相當于 URL 的過濾器。如果什么都不填,那么就監聽所有 XHR 請求。一旦 XHR 調用觸發時就會在 request.send() 的地方中斷。
4.3 事件監聽斷點
事件監聽是對我們選定的是事件類型進行監聽,當這個事件觸發的時候,程序就會在這個事件處停止。有助于我們快速找到某一個元素上綁定的事件。
應用場景:我們剛接手一個項目時,對業務不熟。想找到提交登錄事件對應的方法,但是發現頁面上登錄按鈕綁定事件寫的不是很明確,而且處理登錄業務的JavaScript腳本文件有幾百行,想找到這個按鈕很不容易。此時,我們就可以選定鼠標的點擊事件進行監聽,當我們點擊登錄按鈕的時候控制臺Sources面板會自動將我們帶到登錄方法處。
事件監聽斷點使用步驟(以查找天貓首頁登錄方法為例):
1.首先打開京東登錄頁面找到登錄按鈕;
2.在登錄按鈕上右鍵屬性==》檢查 打開開發者工具,然后打開Sources面板
3.打開Sources面板右側的Event Listener Breakpoints 找到Mouse及鼠標事件下邊的click然后勾選上。
此時就可以一步一步的像下跟,知道跟到天貓的登錄方法了。
5 其他設置
5.1 設置開發者工具的位置:
Chrome剛安裝好時,打開開發者工具,開發者工具默認在瀏覽器的左半邊。
可以通過開發者工具面板右上角的設置開發者工具在瀏覽器中出現的位置。
視圖1:開發者工具以一個獨立的窗口存在;視圖2:在瀏覽器下方顯示;視圖3:在瀏覽器右半邊顯示。
5.2 清除瀏覽器緩存的方法:
瀏覽器緩存(Browser Caching)是為了節約網絡的資源加速瀏覽,瀏覽器在用戶磁盤上對最近請求過的文檔進行存儲,當訪問者再次請求這個頁面時,瀏覽器就可以從本地磁盤顯示文檔,這樣就可以加速頁面的閱覽。但是,對開發人員來說,我們修改了JavaScript腳本之后需要立即看到修改的效果,所以需要清除緩存,清除緩存常用的方法有:
1.Ctrl + F5
F5通常只是刷新本地緩存;Ctrl+F5可以把INTERNET臨時文件夾的文件刪除再重新從服務器下載,也就是徹底刷新頁面了。
2.開發者工具打開之后,快速清除緩存的方法:
開發者工具打開之后,瀏覽器刷新圖標上右鍵會出現清空緩存并硬性重新加載。這一方法能夠在開發者工具打開時快速清理緩存。
3.Ctrl + Shift + Del 快捷鍵清除緩存。
選中地址欄中的URL
按快捷鍵:Ctrl + Shit + Del 會彈出一個清除瀏覽數據的彈窗,選擇要清理的數據項之后,點擊清除瀏覽數據即可。
5.3 禁用頁面的JavaScript腳本;
應用場景:在開發互聯網電商項目時,需要一些商品圖片,于是就去京東找到一個商品打開商品圖片之后,想復制或者將這個圖片另存為,此時,發現右鍵后什么都沒有。
原因是,京東在圖片上通過JavaScript腳本禁用了鼠標右鍵點擊事件。此時,我們可以通過禁用當前頁面的JavaScript事件,通過鼠標右鍵保存圖片。
禁用網頁JavaScript事件的方法:
1)開發者工具==》Settings
2)勾選Debugger下的Disable JavaScript 復選框。
總結
以上是生活随笔為你收集整理的Chrome(谷歌)浏览器调试教程珍藏版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mtk芯片安卓车机系统具体流程
- 下一篇: js计算剩余时间