在底層,Chrome 開發(fā)者工具是用 HTML,JavaScript 和 CSS 寫的 Web 應用程序。在 Javascript 運行時,它提供一個特殊的綁定,這允許它與 chrome 網頁進行交互并且容許裝載它們。交互協(xié)議包括被發(fā)送到頁面的命令,和該頁面生成的事件。盡管 Chrome 開發(fā)者工具是該協(xié)議的主要客戶,其中包括遠程調試(remote debugging,但有很多辦法可以讓第三方能夠使用它,并進行瀏覽器頁面準確裝載。我們將它描述在下面:
交互協(xié)議包括發(fā)送到頁面到 JSON 數(shù)據(jù)格式的命令和頁面生成的事件。我們在 Bink("upstream")
中定義這個協(xié)議,這樣,基于 Blink 的瀏覽器都能支持它。
調試協(xié)議1.1版(Debugger protocol version 1.1)是目前協(xié)議發(fā)布版本中最穩(wěn)定的版本
對于谷歌 Chrome 31,我們致力于支持 V1.1 版本。該協(xié)議的所有后續(xù)1.* 版本將是 1.1 向后兼容。我們的協(xié)議向后兼容性的規(guī)范是:
以前的版本:Protocol v1.0 針對 Chrome 18 發(fā)布和支持的。Protocol v0.1 Chrome 16 發(fā)布和支持的。
tip-of-tree protocol 是易變的的,可能在任何時候都會中斷。然而,它有著協(xié)議的全部功能,穩(wěn)定的發(fā)布版本是他的一個子集。它沒有支持保證它引入的功能的向后兼容性。你可以自己使用它與 Google Canary 建立連接。
tip-of-tree 協(xié)議是在調試協(xié)議視圖中 debugger protocol viewer 更具有可讀性。
你可以檢查 Chrome DevTools 如何使用該協(xié)議。探索新功能時,這是特別方便。首先,在調試端口開啟狀態(tài)運行 Chrome 瀏覽器:
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --remote-debugging-port=9222 http://localhost:9222 http://chromium.org
然后,選擇在視察頁面( Inspectable Pages )列表中的選取 Chromium Projects 子項目。既然 DevTools 開啟,處于全屏狀態(tài),打開 DevTools 來對其進行監(jiān)測。 CMD-R 在新的檢測器中,作第一次重啟?,F(xiàn)在前往 Network 面板,通過 WebSocket 的過濾器,選擇連接,然后單擊框架選項卡?,F(xiàn)在你可以很容易地看到 WebSocket 活動的框架,是你使用的 DevTools 的第一個實例。
開發(fā)者工具前段可以連接到遠程運行的 Chrome 實例進行調試。為了讓此方案起作用,你應該使用遠程調試端口命令行切換來啟動你主機的 Chrome 實例:
chrome.exe --remote-debugging-port=9222
然后,你就可以開始一個客戶端 Chrome 實例,使用單獨的用戶配置文件:
chrome.exe --user-data-dir=<some directory>
現(xiàn)在,你可以從客戶端導向指定的端口,獲取任何調試的選項卡:http://localhost:9222
你會發(fā)現(xiàn)開發(fā)者工具交互界面與內嵌式的是相同的,這是為什么:
在這種情況下,你可以用你自己的實現(xiàn)替代開發(fā)者工具前端。與導向在 http://localhost:9222 端口的 HTML 頁面不同,你的應用程序可以發(fā)現(xiàn)可用的頁面通過請求:
http://localhost:9222/json
并得到一個 JSON 對象和關于有著 WebSocket 地址的可檢測網頁的信息,你可以把他們裝載到頁面中。
調試瀏覽器遠程實例或附著到嵌入式設備時,遠程調試是特別有用的。Blink 端口業(yè)主負責暴露調試連接給外部用戶。
許多應用程序和庫已經使用該協(xié)議。一些用來收集性能數(shù)據(jù),其他一些用來在另一個編輯器中進行斷點調試。Node.js 和 Python 中有包含著原始協(xié)議的庫。
許多客戶端展示在這里:Showcased Debugging Protocol Clients。
為了允許第三方用此協(xié)議進行交互,我們介紹了 chrome.debugger 擴展 API,來暴露這個 JSON 消息傳輸接口。其結果是,你不僅可以獲取遠程運行的 Chrome 實例,而且可以用自己的插件它裝載它。
Chrome 調試器擴展 API 在命令域提供了一個高等級的 API,name 和 body 在 SendCommand
調用中顯式設置。這個API 隱藏了請求 ID ,應答處理其響應,因此它允許 SendCommand
在回調函數(shù)中提交結果報告。也可以和其他擴展 API 結合著使用。
如果你正在開發(fā)一個基于 Web 的 IDE ,你應該實現(xiàn)一個擴展功能,暴露你的網頁調試功能,你的 IDE 就能夠打開目標應用的頁面,設置斷點,在控制臺計算表達式,實時編輯 JavaScript 和 CSS ,顯示活動 DOM ,網絡交互和任何其他任何開發(fā)者工具正在提交的方面。
開放嵌入式開發(fā)工具將終止 (terminate) 遠程連接,從而分離擴展。
我們目前不支持多個客戶端同時連接到協(xié)議。這包括打開工具時而另一個客戶端處于連接狀態(tài)。在 bug 跟蹤系統(tǒng)中,crbug.com/129539 有如下條件;你可以為電子郵件更新標記。
當處于 disconnnection 狀態(tài)下,即將下線的客戶將獲得一個 detached 事件。例如:
{"method":"Inspector.detached","params":
{"reason":"replaced_with_devtools"}}
斷開連接后,一些應用程序選擇暫停他們的狀態(tài),并提供一個重新連接按鈕。