使用者主機權限控制項:轉換指南

摘要

異動內容

從 Chrome 70 開始,使用者可以限制擴充功能主機存取自訂清單 或是設定擴充功能,要求使用者必須按一下滑鼠才能存取目前網頁。

哪些 API 會受到影響?

這項變更會影響受擴充功能中指定的主機權限影響的所有 API 資訊清單和內容指令碼需要主機權限的 API 包括 webRequestCookietabs.executeScript()tabs.insertCSS(),並執行跨來源 要求,例如透過 XMLHTTPRequestfetch() API。

限制存取

使用者如何限制存取權?

使用者可以選擇允許擴充功能在點擊時、在特定網站上,甚至在所有網站上執行 指定的網站。系統會在 chrome://extensions 頁面上向使用者顯示這些選項,以及 。

執行階段主機權限內容選單控制項的螢幕截圖。
            包括點擊時、在特定網站或所有網站上執行擴充功能的選項

如果使用者選擇「按一下時」執行擴充功能,會發生什麼事?

擴充功能基本上等同於使用 activeTab 權限。擴充功能為 已授予使用者點擊擴充功能 (如果主機提出要求) 的暫時存取權 而非受限制的網站,例如 chrome://settings。設為點擊時執行時 Chrome 會在擴充功能加上圓圈和投射陰影 (請見下文),表示: 要求存取特定網站的權限

螢幕截圖:Chrome 會在工具列的擴充功能圖示中加入徽章

如果使用者選擇在特定網站上執行擴充功能,會怎麼樣?

擴充功能會在使用者選擇的任何網站上自動執行,而且可以存取 不需使用者採取進一步行動使用者未造訪您擴充功能的其他網站 所允許的行為,會與使用者設定擴充功能在點擊時執行。

如果使用者選擇在所有網站上執行擴充功能,會發生什麼事?

該擴充功能可自動存取資訊清單中要求的任何網站。

API 行為

網路要求 API

這個擴充功能仍可攔截、修改及封鎖來自可存取網站的要求。適用對象 擴充功能無法存取的網站,而 Chrome 會標記擴充功能,以表示 擴充功能要求存取網頁。然後使用者就能授予擴充功能的存取權。Chrome 之後 提示使用者重新整理網頁,讓擴充功能攔截網路要求。

內容指令碼、tab.executeScript()、tab.insertCSS()

仍然能自動為任何可存取的網站插入指令碼和樣式表 。對於擴充功能無法存取的網站,Chrome 會標記擴充功能,以表示 擴充功能要求存取網頁。接著,使用者即可授予該擴充功能的存取權。如果 內容指令碼已設為在 document_idle 插入,該指令碼將立即插入。否則 Chrome 會提示使用者重新整理網頁,讓擴充功能提早插入指令碼 載入網頁 (位於 document_start 或 document_end)。tabs.executeScript() 的回呼和 只有在使用者授予網站存取權時,系統才會叫用 tabs.insertCSS() 方法。

Cookie 和背景頁面 XHR

這項擴充功能仍可讀取及修改來自擴充功能的 Cookie,以及對網站執行跨來源 XHR 作業 有權存取。因為擴充功能頁面沒有任何分頁會與另一個來源的 Cookie 或 XHRing,Chrome 不會透過標記指示使用者 擴充功能要求存取網站。嘗試存取其他網站的 Cookie 或建立 跨來源 XHR 將會失敗,並顯示錯誤,如同擴充功能的資訊清單不含主機 權限。在這些情況下,建議您採用選擇性權限,讓使用者能夠 授予不同網站的執行階段存取權。

以下範例說明上述方式在 Cookie API 中可能如何運作。

更新前:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

套用後:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

遷移

哪些最佳做法可避免受到負面影響?

擴充功能可以使用選用權限activeTabdeclarativeContent API 並遵循最佳做法系統會在執行階段授予選用權限,並允許擴充功能將 要求網站的特定存取權activeTab 權限不會受到影響,擴充功能也不受影響 使用 Chrome 瀏覽器仍可繼續正常運作。declarativeContent API 可取代許多需求 在每個網頁中插入指令碼。

我目前的使用者會受到什麼影響該如何設定?

這項變更不會立即影響擴充功能目前授予的任何權限。也就是說 除非使用者採取行動限制已存取的網站,否則這個 SDK 將繼續照常運作 。在日後推出的版本中,Chrome 將提供更多控制選項,讓使用者進一步調整 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目

如何檢查擴充功能是否具備在網站上執行的權限?

你可以使用 permissions.contains() API 確認擴充功能是否已 才能取得該來源的存取權