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

摘要

異動內容

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

哪些 API 會受到影響?

凡是受擴充功能資訊清單指定的主機權限,以及內容指令碼所影響的 API,都會受到影響。需要主機權限的 API 包括 webRequestcookiestabs.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 或 XHR 至其他主機的擴充功能頁面相關聯,因此 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 權限不會受到影響,使用它的擴充功能仍可繼續正常運作。declarativeContent API 可取代許多需要在各個頁面中插入指令碼。

這會對目前使用者的設定造成什麼影響?

這項變更不會立即影響任何目前已授予擴充功能的權限。也就是說,除非使用者採取行動來限制可存取的網站,否則 Cookie 會繼續如常運作。在日後推出的版本中,Chrome 將提供更多控制項,讓使用者可以調整設定。

如何檢查我的擴充功能是否有權在網站上執行?

您可以使用 permissions.contains() API 檢查擴充功能是否已將存取權授予特定來源。