說明
使用 chrome.devtools.inspectedWindow API 與受檢查的視窗互動:取得受檢查頁面的分頁 ID、在受檢查視窗的內容中評估程式碼、重新載入頁面,或取得頁面中的資源清單。
如需開發人員工具 API 的一般使用簡介,請參閱「開發人員工具 API 摘要」。
tabId 屬性提供分頁 ID,可與 browser.tabs.* API 呼叫搭配使用。不過,基於安全考量,browser.tabs.* API 不會向開發人員工具擴充功能頁面公開,您必須將分頁 ID 傳遞至背景頁面,並從該頁面叫用 browser.tabs.* API 函式。
reload 方法可用於重新載入受檢查的網頁。此外,呼叫端可以指定使用者代理程式字串的覆寫值、在載入網頁初期插入的指令碼,或強制重新載入快取資源的選項。
使用 getResources 呼叫和 onResourceContent 事件,取得受檢查頁面中的資源清單 (文件、樣式表、指令碼、圖片等)。Resource 類別的 getContent 和 setContent 方法,以及 onResourceContentCommitted 事件,可用於支援修改資源內容,例如由外部編輯器修改。
資訊清單
在檢查的視窗中執行程式碼
eval 方法可讓擴充功能在受檢查網頁的背景中執行 JavaScript 程式碼。在適當情境下,這個方法非常實用,但如果使用不當,則可能造成危險。除非您需要 eval 方法提供的特定功能,否則請使用 tabs.executeScript 方法。
以下是 eval 和 tabs.executeScript 方法的主要差異:
eval方法不會為要評估的程式碼使用獨立環境,因此程式碼可以存取受檢查視窗的 JavaScript 狀態。如需存取受檢查網頁的 JavaScript 狀態,請使用這個方法。- 受評估程式碼的執行環境包含開發人員工具控制台 API。例如,程式碼可以使用
inspect和$0。 - 評估的程式碼可能會傳回值,並傳遞至擴充功能回呼。傳回的值必須是有效的 JSON 物件 (只能包含原始 JavaScript 類型,以及對其他 JSON 物件的非循環參照)。處理從受檢查頁面接收的資料時,請特別小心,因為執行環境基本上是由受檢查頁面控制,惡意頁面可能會影響傳回擴充功能的資料。
請注意,一個網頁可以包含多個不同的 JavaScript 執行環境。每個頁框都有自己的背景資訊,且每個在該頁框中執行內容指令碼的擴充功能,都有額外的背景資訊。
根據預設,eval 方法會在受檢查頁面的主頁框環境中執行。
eval 方法會採用選用的第二個引數,可用來指定評估程式碼的背景資訊。這個 options 物件可包含下列一或多個鍵:
frameURL- 用於指定受檢網頁主頁框以外的頁框。
contextSecurityOrigin- 根據網路來源,在指定頁框中選取結構定義。
useContentScriptContext- 如果為 true,則在與擴充功能內容指令碼相同的環境中執行指令碼。(等同於將擴充功能本身的網路來源指定為內容安全性來源)。可用於與內容指令碼交換資料。
範例
下列程式碼會檢查受檢網頁使用的 jQuery 版本:
browser.devtools.inspectedWindow.eval(
"jQuery.fn.jquery",
function(result, isException) {
if (isException) {
console.log("the page is not using jQuery");
} else {
console.log("The page is using jQuery v" + result);
}
}
);
如要試用這個 API,請從 chrome-extension-samples 存放區安裝 devtools API 範例。
類型
Resource
受檢查網頁中的資源,例如文件、指令碼或圖片。
屬性
-
網址
字串
資源的網址。
-
getContent
void
取得資源內容。
getContent函式如下所示:() => {...}-
returns
Promise<object>
Chrome 151 以上版本 瀏覽器。*自 Chrome 152 起在要求完成時接收資源內容的函式。
-
-
setContent
void
設定資源內容。
setContent函式如下所示:(content: string, commit: boolean) => {...}
-
內容
字串
資源的新內容。目前僅支援文字類型的資源。
-
commit
布林值
如果使用者已完成資源編輯,且應保留資源的新內容,則為 True;如果這是使用者編輯資源時傳送的小幅變更,則為 False。
-
returns
Promise<object>
Chrome 151 以上版本 瀏覽器。*自 Chrome 152 起要求完成時呼叫的函式。
-
屬性
tabId
正在檢查的分頁 ID。這個 ID 可與 chrome.tabs.* API。
類型
數字
方法
eval()
browser.devtools.inspectedWindow.eval(
expression: string,
options?: object,
): Promise<object>
在受檢網頁的主框架中,評估 JavaScript 運算式。運算式必須評估為符合 JSON 規範的物件,否則會擲回例外狀況。eval 函式可以回報開發人員工具端錯誤,或評估期間發生的 JavaScript 例外狀況。無論是哪一種情況,回呼的 result 參數都是 undefined。如果發生開發人員工具端錯誤,isException 參數會是非空值,且 isError 設為 true,code 則設為錯誤代碼。如果發生 JavaScript 錯誤,isException 會設為 true,value 則會設為擲回物件的字串值。
參數
-
運算式
字串
要評估的運算式。
-
選項
物件 選填
options 參數可包含一或多個選項。
-
frameURL
字串 選填
如果指定,系統會對網址與指定網址相符的 iframe 評估運算式。根據預設,系統會在受檢查網頁的頂端框架中評估運算式。
-
scriptExecutionContext
字串 選填
Chrome 107 以上版本 瀏覽器。*自 Chrome 152 起在與指定來源相符的擴充功能內容指令碼中,評估運算式。如果提供 scriptExecutionContext,則會覆寫 useContentScriptContext 的「true」設定。
-
useContentScriptContext
布林值 選填
在呼叫擴充功能的內容指令碼情境中評估運算式,前提是內容指令碼已插入受檢查的頁面。如果沒有,系統就不會評估運算式,並叫用回呼,將例外狀況參數設為物件,其中
isError欄位設為 true,code欄位設為E_NOTFOUND。
-
傳回
-
Promise<object>
Chrome 151 以上版本 瀏覽器。*自 Chrome 152 起評估完成時呼叫的函式。
傳回
-
Promise<Resource[]>
Chrome 151 以上版本 瀏覽器。*自 Chrome 152 起在要求完成時接收資源清單的函式。
reload()
browser.devtools.inspectedWindow.reload(
reloadOptions?: object,
): void
重新載入檢查的網頁。
參數
-
reloadOptions
物件 選填
-
ignoreCache
布林值 選填
如果設為 true,載入器會略過快取,處理在
load事件觸發前載入的所有受檢網頁資源。效果類似於在檢查視窗或開發人員工具視窗中按下 Ctrl+Shift+R 鍵。 -
injectedScript
字串 選填
如果指定,系統會在載入受檢網頁時,立即將指令碼插入每個頁框,並在頁框的任何指令碼之前執行。後續重新載入 (例如使用者按下 Ctrl+R 鍵) 後,系統不會插入指令碼。
-
userAgent
字串 選填
如果指定,這個字串會覆寫載入受檢網頁資源時傳送的
User-AgentHTTP 標頭值。這個字串也會覆寫navigator.userAgent屬性的值,並傳回給在受檢查網頁中執行的任何指令碼。
-
事件
onResourceAdded
browser.devtools.inspectedWindow.onResourceAdded.addListener(
callback: function,
)
在受檢查頁面中新增資源時觸發。
onResourceContentCommitted
browser.devtools.inspectedWindow.onResourceContentCommitted.addListener(
callback: function,
)
提交資源的新修訂版本時觸發 (例如使用者在開發人員工具中儲存資源的編輯版本)。