從背景頁面轉換至擴充功能服務 Worker 時,開發人員可以使用 chrome.offscreen
API 和資訊清單權限來取代從背景頁面轉換到擴充功能服務工作站的功能。要求這項權限可讓您建立畫面外文件,以便建立畫面外文件使用 DOM API,而不需突然開啟新的視窗或分頁,造成使用者體驗中斷。Chrome 擴充功能現在提供 chrome.offscreen
API。
在 Chromium 中,Manifest V3 擴充功能主要是透過服務工作處理程序,但對於完整文件網頁 (包括背景和事件網頁) 提供的 API 和機制,服務工作人員並不提供支援。此外,在網頁上使用內容指令碼存取 DOM API 時,擴充功能必須遵循不同內容安全政策的規定。為協助解決這個問題,我們將推出畫面外文件,透過專屬的 API,允許 Manifest V3 擴充功能在執行階段,開啟最小、限定範圍且權限相對較少的螢幕外文件,藉此支援 DOM 相關功能和 API。
功能資訊
由於畫面外文件是專為處理服務工作處理程序 (例如音訊播放) 不支援的用途 (例如音訊播放) 而設計,因此本頁面的生命週期,以及將授予的權限與擴充功能服務 Worker 分開處理。該網頁的生命週期機制與 Manifest V2 中的事件頁面類似,因為頁面會在停止執行動作時隨即關閉。此外,使用者代理程式可能會對指定用途的生命週期設有進一步限制。螢幕外文件旨在填補只能透過 DOM API 存取的 API 來填補缺漏;因此,擴充功能 API 不需要直接在此內容中公開。為降低擴充功能做為「替換背景頁面」的可能性,只有 chrome.runtime
訊息 API 會揭露到畫面外的文件。(開發人員也可以透過服務工作處理程序,將畫面外的文件宣告為 Client,藉此使用網路訊息功能)。由於某些使用案例 (尤其是網站抓取) 需要存取跨來源頁框,我們允許這些文件依照擴充功能網頁目前的規則嵌入跨來源頁框。在畫面外文件中,擴充功能指定的內容指令碼可以在這些頁框中執行,以便抓取任何必要內容,就跟任何一般網頁一樣。
原因和需要目的
製作畫面外文件需要提供明確理由和進一步理由。這些原因列於 API 參考說明文件中,也會透過各種方式處理文件的生命週期。舉例來說,一個用來播放音訊的文件,目前在保留文件生命週期內套用的規則,不同於開啟剪貼簿管理文件而適用的規則。你也可以在以上說明中詳細說明畫面外文件的用途,也就是由開發人員編寫的字串,而非會影響文件效果的參數。 隨著開發人員分享意見和用途,日後可能會陸續加入 API。
未來展望
為了方便起見,這個 API 的第一個版本一次僅支援每個擴充功能一個網頁和每個設定檔。在日後的版本中,我們可能會放寬此限制以支援多個頁面。目前,如果擴充功能透過已啟用的無痕模式設定檔,以分割模式執行,一般設定檔和無痕模式設定檔都能建立一份畫面外文件。 也計劃在日後提供擴充功能工作站 DOM 功能。您可以將使用畫面外 API 的函式與 Service Worker 中同等的註解函式配對,方便日後更換擴充功能,讓擴充功能「與時俱進」。
// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
await chrome.offscreen.createDocument({
url: 'offscreen.html',
reasons: [chrome.offscreen.Reason.CLIPBOARD],
justification: 'Write text to the clipboard.',
});
}
// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
navigator.clipboard.writeText(value);
}
此外,由於 DOM 功能和 API 已新增至服務工作處理程序,因此會根據服務工作處理程序目前的狀態,以及使用畫面外文件的原因,將建立文件的原因清單新增或減少。
結論
畫面外文件允許需要存取 DOM 或視窗互動,而目前服務工作處理程序中無法提供的擴充功能。它還提供靈活的方法,讓您新增用途,以及移除未來解決的用途。擴充功能應針對特定用途使用提議的畫面外文件 API,而擴充功能的主要背景內容應維持資訊清單中指定的 Service Worker。螢幕外文件的 API 存取權有限,因此不應存放主要擴充功能邏輯。螢幕外文件的生命週期與建立該文件的 Service Worker 無關。有關擴充功能中 Service Worker 生命週期的考量和使用案例,我們將在另一篇網誌文章中說明。 隨著功能和 API 新增到 Service Worker 本身,使用畫面外文件的原因會隨著時間而波動。敬請拭目以待,期待能收到開發人員的意見回饋。