Skip to main content
webRequest API 觀察頁面發出的每個請求。在 Manifest V3 中,這些監聽器只能觀察:你可以記錄、量測與分析流量,但不能在 JavaScript 中改寫它。

MV3 允許什麼

一般安裝的 Chrome 在 Manifest V3 中不能使用 webRequestBlocking。如果你的目標是封鎖或改寫流量,請改為宣告規則。參考 打造一個廣告封鎖器

Manifest

webRequest 事件只會針對擴充功能能存取的 host 觸發,因此把這個權限與 host permissions 搭配使用。
manifest.json

在 background 觀察請求

在 background script 的最上層註冊監聽器,讓 service worker 在每次喚醒時重新註冊它們。
background.js
每個 details 物件都帶有請求 id、分頁 id、方法、URL、資源類型與時間資訊。以 details.requestId 關聯事件,就能建立完整的請求時間軸。

在 devtools 面板中檢視請求

要連同回應內容一起檢視請求,devtools 面板是更好的介面。chrome.devtools.network API 以 HAR 項目形式提供已完成的請求,而且不需要 webRequest 權限。 devtools_page 負責註冊面板:
devtools/scripts.js
面板接著記錄受檢分頁的流量:
panel/scripts.js
監聽器只在 devtools 於該分頁開啟時收到流量。用 chrome.devtools.network.getHAR 讀取面板附加之前載入的內容。

執行

開啟任何頁面,觀察 background 主控台記錄流量。接著在頁面上開啟 devtools,選擇 Requests 面板。

Firefox 的差異

  • Firefox 的 Manifest V3 仍支援搭配 webRequestBlocking 權限的阻斷式 webRequest
  • Firefox 把 Manifest V3 的 host permissions 視為選擇性加入。使用者從擴充功能面板授權,而不是在安裝時。
  • Firefox 以事件頁面而非 service worker 執行 background。最上層的監聽器註冊在兩者都可運作。
  • 上述 devtools API 在 Firefox 以相同的 chrome.devtools.* 名稱運作。
共通的 API 面請參考 跨瀏覽器相容性

從範本開始

devtools 範本附帶可運作的 devtools_page 與面板串接。
儲存庫:extension-js/examples/devtools

最佳實務

  • 縮小每個監聽器的 urls 過濾條件,不要在正式環境監聽 <all_urls>
  • requestId 而不是 URL 關聯事件,因為頁面會重複使用 URL。
  • 讓監聽器保持快速,因為每個被觀察的請求都會呼叫它們。
  • 只請求你的功能需要的最小 host permissions。
  • 封鎖用 declarativeNetRequestwebRequest 保留給觀察。

後續步驟