Chrome 155 的 chrome.debugger 被政策擋住?先查兩種錯誤
如果 Chrome 擴充功能原本能呼叫 chrome.debugger.attach(),升級到 Chrome 155 Beta 後卻突然失敗,先不要把問題歸類成 target 不存在或 debugger permission 遺失。Chrome 官方公告指出,這次改動只影響受管理瀏覽器,而且必須同時有特定企業政策;個人或未受管理的瀏覽器不在這次變更範圍內。
直接答案是:先讀 attach() rejection 的完整訊息。若是 Host access is restricted by policy.,查 runtime_blocked_hosts;若是 Screenshot capture is restricted by policy.,查 DisableScreenshots 或 DLP。這兩類限制是在 attach 時一次性判定,不是替某個 origin 加進 allowlist 就能繞過。
先掌握 Chrome 155 的時間與範圍
Chrome for Developers 列出的時間是:
| Channel | 日期 | 解讀 |
|---|---|---|
| Chrome 155 Beta | 2026-09-16 | 可以先在隔離的測試瀏覽器驗證擴充功能 |
| Chrome 155 Stable rollout | 2026-10-06 | 受管理環境可能開始遇到正式版本行為 |
這不是所有 chrome.debugger 呼叫都會被封鎖。官方說明的條件是:瀏覽器受企業管理,且管理員設定了 runtime_blocked_hosts、DisableScreenshots 或 DLP 規則。未受管理的瀏覽器,或沒有這些特定限制的受管理環境,API 仍照常運作。
兩種錯誤訊息代表不同政策
attach() 錯誤 | 優先檢查 | 重要邊界 |
|---|---|---|
Host access is restricted by policy. | ExtensionSettings.runtime_blocked_hosts | 只要 extension 有非空的 blocked hosts,attach 會對所有 target 被拒絕;runtime_allowed_hosts 不能把它改成逐 origin 例外 |
Screenshot capture is restricted by policy. | DisableScreenshots 或 DLP | 只要截圖被停用或目標受 DLP 規則限制,attach 就會失敗 |
chrome.debugger 能把 Chrome DevTools Protocol(CDP)帶進擴充功能,執行 script、攔截網路或修改 DOM,因此 Chrome 155 採用 attach 時的 all-or-nothing policy check。這也是為什麼「某個頁面已在 allowlist」不一定能拯救整個 debugger session。
在程式碼中保留可讀的錯誤分流
Manifest V3 可以把 attach() rejection 轉成支援人員看得懂的訊息。先確認 manifest 宣告了 debugger permission,再在 attach 邊界處理政策錯誤:
{ "manifest_version": 3, "permissions": ["debugger"]}async function attachDebugger(tabId) { try { await chrome.debugger.attach({ tabId }, "1.3"); return { ok: true }; } catch (error) { const message = error instanceof Error ? error.message : String(error);
if (message.includes("Host access is restricted by policy")) { return { ok: false, reason: "enterprise-host-policy", message: "此瀏覽器的 host policy 不允許 debugger。", }; }
if (message.includes("Screenshot capture is restricted by policy")) { return { ok: false, reason: "enterprise-screenshot-policy", message: "此瀏覽器的截圖或 DLP policy 不允許 debugger。", }; }
return { ok: false, reason: "other-attach-error", message }; }}不要只顯示「Debugger failed」。把 Chrome 版本、是否受管理、target tab id、錯誤原文與擴充功能版本一起記到不含敏感內容的診斷資料,支援人員才有辦法分辨政策拒絕和一般的 attach 失敗。
排錯順序:先政策,再 target
當錯誤只在公司裝置發生時,可以依這個順序縮小範圍:
- 比對受管理狀態:在同一台裝置的測試 profile 觀察 Chrome 是否顯示由組織管理;再用沒有企業政策的測試環境比對。個人環境成功、公司環境失敗,是政策線索,不是證明。
- 查看目前載入的政策:在受管理的 Chrome 開啟
chrome://policy,確認ExtensionSettings、runtime_blocked_hosts、DisableScreenshots等欄位是否真的套用到該 extension 或目標環境。 - 確認 extension manifest:確認
debuggerpermission 沒被移除,並記下 extension ID。Chrome Enterprise 的ExtensionSettings是依 extension ID 套用個別設定,預設*也可能影響未單獨指定的 extension。 - 最後才查 target:政策錯誤排除後,再確認 tab 是否存在、是否已被另一個 debugger session attach、required protocol version 是否符合,以及 attach 前後的生命週期。
- 保存 channel 與日期:Chrome 155 Beta 與 Stable 的 rollout 日期不同;CI 應把 channel、版本和政策快照寫進測試結果。
如果 chrome://policy 沒有顯示相關政策,但仍得到政策錯誤,不要立刻修改管理設定。先確認瀏覽器是否已重新整理政策、extension ID 是否正確,以及錯誤是否來自另一個 target 或 wrapper API。
allowlist 不能把 debugger 變成逐頁權限
runtime_allowed_hosts 對一般 extension host access 仍有用途,但 Chrome 155 對 chrome.debugger.attach() 的政策判定是整個 attach 邊界。只要 extension 被設定非空的 runtime_blocked_hosts,官方說明是所有 target 都會被拒絕,即使個別 origin 同時出現在 allowed list。
因此管理員要先做架構決定:
- 如果 extension 確實需要 CDP,就不要替它配置會觸發這條 all-or-nothing 規則的 blocked hosts,並依組織的風險政策管理可安裝與可執行範圍。
- 如果需求只是對允許的頁面執行 script 或插入 style,評估
chrome.scripting,讓 host permissions 保持較細的範圍。 - 如果需求是宣告式攔截或修改網路請求,評估
chrome.declarativeNetRequest,不要為了取得 CDP 而承擔整個 debugger permission 的限制。 - 如果只需要 Cookie 存取,評估
chrome.cookies與標準 host permissions。
替代 API 不是行為完全相同的 drop-in replacement。先列出實際使用的 CDP domain、需要的 target 類型與資料流,再逐項驗證替代方案;不要只把 permission 名稱換掉就宣稱遷移完成。
上線前的最小驗證矩陣
至少保留四組結果:
| 測試環境 | 期望觀察 |
|---|---|
| 未受管理、沒有企業政策 | attach() 可依原本流程成功或回報一般錯誤 |
受管理、非空 runtime_blocked_hosts | attach 失敗並出現 host policy 訊息 |
受管理、DisableScreenshots 或 DLP 生效 | attach 失敗並出現 screenshot policy 訊息 |
| 受管理、沒有上述限制 | 功能應與原本流程一致;若仍失敗,回到 target、permission 和 protocol version |
這組矩陣能把 Chrome 155 的政策行為和擴充功能自身的 regression 分開。正式支援文件也應告知企業使用者:政策拒絕需要管理員處理,重新安裝 extension、清除 cache 或重開分頁不會移除組織政策。
這篇聚焦 chrome.debugger 的企業政策邊界;若你要安排 Beta、Stable 和 Extended Stable 的回歸節奏,可接著看 Chrome 改成兩週更新後,前端測試排程怎麼調整?。
參考資料:
Chrome for Developers:Stricter enterprise policy enforcement for chrome.debugger in Chrome 155
回報錯字、失效連結,或告訴我你想看的延伸主題。