概覽#

Sources 面板的 Workspace 是用來瀏覽與修改當前頁面各種 Context 資源的地方,上方有五個頁籤:

  • Page
  • Filesystem
  • Overrides
  • Content scripts
  • Snippets

本章會走過每個頁籤的功能與適用情境。閱讀本章前建議先理解 Source Map 的概念,可參考前一章「Sources - Source Map 與檔案編輯」。

Page#

當瀏覽器載入網頁時,所有取得的檔案(HTML、CSS、JavaScript、圖片等)都會出現在 Page 頁籤中。檔案以資料夾形式呈現,方便觀察結構,除了主 Domain 之外,還包括:

  • 來自其他 Domain 的資源。
  • 其他 Frame,例如頁面內嵌的 iframe
  • 其他 Context,例如 ServiceWorker。

也可以透過右上角的選項把所有檔案攤平,並依檔名 a~z 排序。如果還是不夠,按 Command+P 直接以檔名快速搜尋。

除了主動進入 Sources 面板,前面章節介紹過的 Elements、Console 面板裡的 CSS 與 JavaScript 連結,以及 Network 面板的請求,幾乎都能透過點擊或右鍵選單的 Reveal in Sources panel 直接跳轉到 Page 頁籤的對應檔案,反向也成立。

Filesystem#

還記得 File Editing 介紹過的「驚嘆號圖示」嗎?訊息是:

Changes to this file were not saved to file system

直接編輯資源僅在當次瀏覽生效,重整就消失。要把修改真正留下來,就需要一塊本機儲存空間來同步檔案。Filesystem 就是這個機制,它把 DevTools 升級成一個與本機檔案連動的 IDE。

要使用 Filesystem,會需要一份本機檔案與一個簡單的 Server。常見作法:

  • 準備測試用頁面資料夾。
  • 在資料夾內以 Node.js 執行 npx serve . 啟動本機 Server。
  • 瀏覽器開啟 localhost:5000,打開 DevTools > Sources > Filesystem。
  • 把資料夾拖入 Filesystem,並點擊上方的「Allow」授權檔案系統存取(File System Access)。
  • 修改檔名旁有綠點的 index.htmlstyle.cssindex.js 並存檔,本機檔案會同步更新。
npx serve .

檔名旁的小綠點代表已成功與本機檔案連結,存檔即時同步。

搭配 Source Map 後即使 CSS 經過處理仍能正確編輯。對於常需要在 IDE 與瀏覽器之間切換、確認樣式的工作流程很有幫助。

Overrides#

Filesystem 需要本機環境,但有時候你只是想覆寫一個沒有原始碼的線上網站,或是該專案太大不方便跑起來。這時 Overrides 就派上用場。

操作流程:

  • 切到 Overrides 分頁,點擊 Select folder for overrides 選擇任意資料夾,這份資料夾用來存放修改後的檔案。
  • 同樣需要授權頁面允許存取。
  • 直接修改 index.js 並存檔,檔名旁會出現紫色小圓點。
  • 重整頁面後,Page 頁籤裡的 index.js 仍然是剛才修改過的版本。

此時 Network 面板的標籤上會出現警告圖示,提示有 Request 被 Local overrides 攔截。原本應該從伺服器取得的 index.js,已經被替換為本機資料夾裡的那份。

與 Filesystem 不同,Overrides 也支援修改 index.html,這對於除錯第三方網站、驗證假說(例如 JavaScript 載入順序問題)非常實用。

Content Scripts#

如果頁面上有 Chrome Extension 注入的 Content Scripts,Content scripts 分頁會列出來。這個頁籤無法做 Local overrides,若要修改其行為,可以在第一行下斷點,重整後再進行編輯。

Snippets#

Snippets 是用來儲存與執行任意 JavaScript 片段的工具:

  • 透過 + New snippet 新增。
  • 在 Snippet 上右鍵選擇 Run 執行。

透過 Snippet 執行 JavaScript 享有 Console 的特性,例如 User activation、Console utilities。

Snippet 適合用來放小工具,例如列出頁面上所有圖片的 src、自動填表單。除了在 DevTools 裡執行,也可以把同樣的程式碼包成 javascript: 拖到瀏覽器書籤列:

javascript: alert(`Today is ${new Date().toDateString()}`);

小結#

Workspace 提供四種不同層次的修改能力:Page 觀察、Filesystem 同步、Overrides 攔截覆寫、Snippets 執行片段。掌握之後,遇到「想改網頁行為卻不知道怎麼下手」的情境就有完整的工具箱。

下一章會延續這條線,深入介紹斷點的種類與實際應用。

原文出處#