eval 是自動化能力最強的動詞,因此它上了雙重鎖。工作階段必須以 extension dev --allow-eval 啟動,而且 CLI 必須出示開發伺服器為這個專案與瀏覽器寫下的工作階段權杖。只要你在同一個專案根目錄執行這兩個指令,這兩件事都會自動完成。
何時使用 eval
- 你想在不開啟 DevTools 的情況下探查擴充功能狀態(
chrome.runtime、儲存空間、DOM)。 - agent 需要在頁面內執行一次檢查,並取回一個結構化的值。
- 你想要一個可腳本化的 REPL,對著 background worker 或某個即時分頁操作。
用法
引數與旗標
擴充功能頁面(
popup、options、sidebar、devtools、newtab、history、bookmarks)是透過它們自己的頁內轉送來回應的,因此該介面必須已在瀏覽器中開啟。請先用 open(記載於 觸發 action 與 command)把它開起來。
pretty 輸出印出的是值本身:字串原樣輸出,其餘一律以縮排 JSON 輸出。信封結構只會在 --output json 之下出現(參見 結果信封)。
解鎖機制如何運作
extension dev --allow-eval會以啟用 eval 的方式啟動工作階段。--allow-eval同時也會解鎖其他控制動詞,所以你不需要同時加上兩個旗標。- 開發伺服器會把一個隨機工作階段權杖寫入
.extension-js/control-token-<browser>,權限為0600。權杖以瀏覽器為鍵,因此並行的工作階段不會互相衝突。 eval會從專案根目錄讀取該權杖,並在握手時出示它。
--allow-eval 啟動的工作階段會拒絕這次呼叫,而且拒絕訊息會點名 --allow-eval 是應該補上的旗標。權杖遺失會以 E_TOKEN_MISSING 失敗,權杖不符或 eval 被停用則是 E_EVAL_REFUSED。
失敗模式
- 運算式在目標中拋出例外:
E_EVAL,並附上提示指出問題出在運算式本身。這是一個結果,不是傳輸錯誤。 - 該瀏覽器沒有工作階段:
E_SESSION_NOT_FOUND,並給出應該執行的完整extension dev指令。 - 目標介面未開啟,或
--tabid 已失效:E_TARGET_NOT_FOUND。請用inspect --list-tabs找出仍然存活的 id。 - 呼叫超過了
--timeout:E_TIMEOUT。
0,否則為 1,因此腳本可以直接據此做判斷。當每個動詞都失敗、而你想知道是哪一環斷掉時,請執行 doctor。

