說明
使用 chrome.contentSettings
API 變更設定,控制網站是否可使用 Cookie、JavaScript 和外掛程式等功能。一般來說,您可以透過內容設定自訂 Chrome 的行為,但只能針對個別網站自訂,而非全域設定。
權限
contentSettings
您必須在擴充功能的資訊清單中宣告 "contentSettings"
權限,才能使用 API。例如:
{
"name": "My extension",
...
"permissions": [
"contentSettings"
],
...
}
概念和用法
內容設定模式
您可以使用模式指定每個內容設定的適用網站。例如,https://*.youtube.com/*
會指定 youtube.com 及其所有子網域。內容設定模式的語法與比對模式相同,但有幾項差異:
- 對於
http
、https
和ftp
網址,路徑必須是萬用字元 (/*
)。對於file
網址,路徑必須完整指定,且不得包含萬用字元。 - 與比對模式不同,內容設定模式可指定通訊埠號碼。如果指定通訊埠號碼,模式只會比對具有該通訊埠的網站。如果未指定通訊埠號碼,模式會比對所有通訊埠。
模式優先順序
如果某個網站適用多項內容設定規則,系統會優先採用較具體的規則。
舉例來說,下列模式會依優先順序排列:
https://www.example.com/*
https://*.example.com/*
(比對 example.com 和所有子網域)<all_urls>
(比對所有網址)
有三種萬用字元會影響模式的特定性:
- 通訊埠中的萬用字元 (例如
https://www.example.com:*/*
) - 配置中的萬用字元 (例如
*://www.example.com:123/*
) - 主機名稱中的萬用字元 (例如
https://*.example.com:123/*
)
如果某個部分的模式比其他部分的模式更具體,但其他部分的模式不夠具體,系統會依以下順序檢查不同部分:主機名稱、配置、通訊埠。例如,下列模式依優先順序排列:
https://www.example.com:*/*
指定主機名稱和配置。*:/www.example.com:123/*
不太高,因為雖然它指定了主機名稱,但未指定配置。https://*.example.com:123/*
較低,因為雖然它指定了通訊埠和配置,但主機名稱中含有萬用字元。
主要和次要模式
決定要套用哪種內容設定時,系統會考量的網址取決於內容類型。舉例來說,contentSettings.notifications
的設定會根據萬用手寫板中顯示的網址。這個網址稱為「主要」網址。
部分內容類型可考量其他網址。舉例來說,系統會根據 HTTP 要求的網址 (在本例中為主要網址) 和萬用盒中顯示的網址 (稱為「次要」網址),決定網站是否可設定 contentSettings.cookies
。
如果有多個規則包含主要和次要模式,則優先採用較明確的主要模式的規則。如果有多個規則具有相同的主要模式,則會優先套用具有更明確次要模式的規則。舉例來說,以下主要/次要模式組合的清單會依優先順序排列:
優先順序 | 主要模式 | 次要模式 |
---|---|---|
1 | https://www.moose.com/* 、 | https://www.wombat.com/* |
2 | https://www.moose.com/* 、 | <all_urls> |
3 | <all_urls> 、 | https://www.wombat.com/* |
4 | <all_urls> 、 | <all_urls> |
圖片內容設定不支援次要模式。
資源 ID
您可以使用資源 ID 指定特定內容類型的子類型內容設定。目前,唯一支援資源 ID 的內容類型是 contentSettings.plugins
,其中資源 ID 會識別特定外掛程式。套用內容設定時,系統會先檢查特定外掛程式的設定。如果找不到特定外掛程式的設定,系統會檢查外掛程式的一般內容設定。
舉例來說,如果內容設定規則包含資源 ID adobe-flash-player
和模式 <all_urls>
,則會優先採用該規則,而非沒有資源 ID 和模式 https://www.example.com/*
的規則,即使後者更具體也一樣。
您可以呼叫 contentSettings.ContentSetting.getResourceIdentifiers()
方法,取得內容類型的資源 ID 清單。系統會根據使用者電腦上安裝的外掛程式組合,變更傳回的清單,但 Chrome 會盡量在外掛程式更新後維持穩定的 ID。
範例
如要試用這個 API,請從 chrome-extension-samples 存放區安裝 contentSettings API 範例。
類型
AutoVerifyContentSetting
列舉
"allow"
"block"
CameraContentSetting
列舉
"allow"
"block"
"ask"
ClipboardContentSetting
列舉
"allow"
"block"
"ask"
ContentSetting
屬性
-
關閉
void
Promise清除此擴充功能設定的所有內容設定規則。
clear
函式如下所示:(details: object, callback?: function) => {...}
-
詳細資料
物件
-
範圍
範圍 選填
清除設定的位置 (預設值:regular)。
-
-
回呼
函式 選填
callback
參數如下所示:() => void
-
returns
Promise<void>
Chrome 96 以上版本承諾在資訊清單 3 以上版本中受支援,但回呼則是為了回溯相容性而提供。您無法在同一個函式呼叫中同時使用這兩種方法。承諾會以傳遞至回呼的相同類型解析。
-
-
get
void
Promise取得指定一組網址目前的內容設定。
get
函式如下所示:(details: object, callback?: function) => {...}
-
詳細資料
物件
-
無痕模式
boolean 選填
是否要檢查無痕模式工作階段的內容設定。(預設為 false)
-
primaryUrl
字串
應擷取內容設定的主要網址。請注意,主要網址的意義會因內容類型而異。
-
resourceIdentifier
應擷取設定的內容類型,其 ID 更為明確。
-
secondaryUrl
string 選填
應擷取內容設定的次要網址。預設為主要網址。請注意,次要網址的含義取決於內容類型,且並非所有內容類型都會使用次要網址。
-
-
回呼
函式 選填
callback
參數如下所示:(details: object) => void
-
詳細資料
物件
-
設定
T
內容設定。如要瞭解可能的值,請參閱個別 ContentSetting 物件的說明。
-
-
-
returns
Promise<object>
Chrome 96 以上版本承諾在資訊清單 3 以上版本中受支援,但回呼則是為了回溯相容性而提供。您無法在同一個函式呼叫中同時使用這兩種方法。承諾會以傳遞至回呼的相同類型解析。
-
-
getResourceIdentifiers
void
PromisegetResourceIdentifiers
函式如下所示:(callback?: function) => {...}
-
回呼
函式 選填
callback
參數如下所示:(resourceIdentifiers?: ResourceIdentifier[]) => void
-
resourceIdentifiers
ResourceIdentifier[] 選填
此內容類型的資源 ID 清單,如果此內容類型不使用資源 ID,則為
undefined
。
-
-
returns
Promise<ResourceIdentifier[]>
Chrome 96 以上版本承諾在資訊清單 3 以上版本中受支援,但回呼則是為了回溯相容性而提供。您無法在同一個函式呼叫中同時使用這兩種方法。承諾會以傳遞至回呼的相同類型解析。
-
-
set
void
Promise套用新的內容設定規則。
set
函式如下所示:(details: object, callback?: function) => {...}
-
returns
Promise<void>
Chrome 96 以上版本承諾在資訊清單 3 以上版本中受支援,但回呼則是為了回溯相容性而提供。您無法在同一個函式呼叫中同時使用這兩種方法。承諾會以傳遞至回呼的相同類型解析。
-
CookiesContentSetting
列舉
"allow"
"block"
"session_only"
FullscreenContentSetting
值
"allow"
ImagesContentSetting
列舉
"allow"
"block"
JavascriptContentSetting
列舉
"allow"
"block"
LocationContentSetting
列舉
"allow"
"block"
"ask"
MicrophoneContentSetting
列舉
"allow"
"block"
"ask"
MouselockContentSetting
值
"allow"
MultipleAutomaticDownloadsContentSetting
列舉
"allow"
"block"
"ask"
NotificationsContentSetting
列舉
"allow"
"block"
"ask"
PluginsContentSetting
值
"block"
PopupsContentSetting
列舉
"allow"
"block"
PpapiBrokerContentSetting
值
"block"
ResourceIdentifier
唯一使用資源 ID 的內容類型是 contentSettings.plugins
。詳情請參閱「資源 ID」。
屬性
-
說明
string 選填
資源的使用者可讀說明。
-
id
字串
指定內容類型的資源 ID。
Scope
ContentSetting 的範圍。regular
:一般設定 (如果未在其他地方覆寫,則會由無痕模式設定繼承);incognito\_session\_only
:無痕模式設定,只能在無痕模式工作階段期間設定,並在無痕模式工作階段結束時刪除 (覆寫一般設定)。
列舉
"regular"
"incognito_session_only"
屬性
automaticDownloads
是否允許網站自動下載多個檔案。allow
:允許網站自動下載多個檔案。block
:禁止網站自動下載多個檔案。ask
:詢問網站要在第一個檔案下載完畢後自動下載檔案。預設值為 ask
。主要網址是頂層框架的網址。不會使用次要網址。
autoVerify
是否允許網站使用 Private State Tokens API。allow
:允許網站使用 Private State Tokens API;block
:禁止網站使用 Private State Tokens API。預設值為 allow
。主要網址是頂層框架的網址。系統不會使用次要網址。注意:呼叫 set()
時,主要模式必須為 。
camera
是否允許網站存取相機。allow
:允許網站存取相機、block
:不允許網站存取相機、ask
:詢問網站何時想要存取相機。預設值為 ask
。主要網址是要求相機存取權的文件網址。系統不會使用次要網址。注意:如果兩個模式都為「''」,則「允許」設定無效。
clipboard
允許網站透過 Async Clipboard API 的進階功能存取剪貼簿。「進階」功能除了在使用者手勢後寫入內建格式之外,還包括讀取、寫入自訂格式,以及在沒有使用者手勢的情況下寫入的功能。allow
:允許網站使用進階剪貼簿功能、block
:不允許網站使用進階剪貼簿功能、ask
:詢問網站何時要使用進階剪貼簿功能。預設值為 ask
。主要網址是要求剪貼簿存取權的文件網址。不會使用次要網址。
cookies
是否允許網站設定 Cookie 和其他本機資料。allow
:接受 Cookie、block
:封鎖 Cookie、session\_only
:只接受目前工作階段的 Cookie。預設值為 allow
。主要網址是代表 Cookie 來源的網址。次要網址是頂層框架的網址。
fullscreen
已淘汰。不再有任何效果。系統現在會自動授予所有網站全螢幕權限。值一律為 allow
。
images
是否顯示圖片。allow
:顯示圖片、block
:不顯示圖片。預設值為 allow
。主要網址是頂層框架的網址。次要網址是圖片的網址。
javascript
是否執行 JavaScript。allow
:執行 JavaScript、block
:不執行 JavaScript。預設值為 allow
。主要網址是頂層框架的網址。不會使用次要網址。
location
是否允許地理位置資訊。您可以選擇:allow
:允許網站追蹤您的實體位置;block
:不允許網站追蹤您的實體位置;ask
:允許網站追蹤您的實體位置前先詢問。預設值為 ask
。主要網址是要求位置資料的文件網址。次要網址是頂層框架的網址 (可能與要求網址相同,也可能不同)。
microphone
是否允許網站存取麥克風。allow
:允許網站存取麥克風、block
:不允許網站存取麥克風、ask
:詢問網站何時要存取麥克風。預設值為 ask
。主要網址是要求麥克風存取權的文件網址。系統不會使用次要網址。注意:如果兩個模式都為「''」,則「允許」設定無效。
mouselock
已淘汰。不再有任何效果。系統現在會自動授予所有網站滑鼠鎖定權限。值一律為 allow
。
notifications
是否允許網站顯示桌面通知。allow
:允許網站顯示桌面通知、block
:不允許網站顯示桌面通知、ask
:詢問網站是否要顯示桌面通知。預設值為 ask
。主要網址是指要顯示通知的文件網址。不會使用次要網址。
plugins
已淘汰。由於 Chrome 第 88 版已移除 Flash 支援功能,這項權限將不再生效。值一律為 block
。系統會忽略對 set()
和 clear()
的呼叫。
popups
是否允許網站顯示彈出式視窗。allow
:允許網站顯示彈出式視窗,block
:不允許網站顯示彈出式視窗。預設值為 block
。主要網址是頂層框架的網址。不會使用次要網址。
unsandboxedPlugins
已淘汰。先前,這項權限會控管是否允許網站在無沙箱的情況下執行外掛程式,但由於 Chrome 88 已移除 Flash 中介服務程序,這項權限已無任何效果。值一律為 block
。系統會忽略對 set()
和 clear()
的呼叫。