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
chrome.devtools.network.getHAR 讀取面板附加之前載入的內容。
執行
Firefox 的差異
- Firefox 的 Manifest V3 仍支援搭配
webRequestBlocking權限的阻斷式webRequest。 - Firefox 把 Manifest V3 的 host permissions 視為選擇性加入。使用者從擴充功能面板授權,而不是在安裝時。
- Firefox 以事件頁面而非 service worker 執行 background。最上層的監聽器註冊在兩者都可運作。
- 上述 devtools API 在 Firefox 以相同的
chrome.devtools.*名稱運作。
從範本開始
devtools 範本附帶可運作的 devtools_page 與面板串接。
最佳實務
- 縮小每個監聽器的
urls過濾條件,不要在正式環境監聽<all_urls>。 - 用
requestId而不是 URL 關聯事件,因為頁面會重複使用 URL。 - 讓監聽器保持快速,因為每個被觀察的請求都會呼叫它們。
- 只請求你的功能需要的最小 host permissions。
- 封鎖用
declarativeNetRequest,webRequest保留給觀察。
後續步驟
- 在 打造一個廣告封鎖器 以宣告方式封鎖流量。
- 在 安全檢查清單 檢視 host permission 衛生。
- 在 Manifest V3 概念 檢視 service worker 生命週期。

