chrome.contentSettings

说明

使用 chrome.contentSettings API 更改用于控制网站是否可以使用 Cookie、JavaScript 和插件等功能的设置。更一般地说,内容设置允许您按网站自定义 Chrome 的行为,而不是全局自定义。

权限

contentSettings

您必须在扩展程序的清单中声明 "contentSettings" 权限才能使用该 API。例如:

{
  "name": "My extension",
  ...
  "permissions": [
    "contentSettings"
  ],
  ...
}

概念和用法

内容设置模式

您可以使用模式来指定每项内容设置所影响的网站。例如,https://*.youtube.com/* 指定了 youtube.com 及其所有子网域。内容设置模式的语法与匹配模式的语法相同,但存在以下几点差异:

  • 对于 httphttpsftp 网址,路径必须是通配符 (/*)。对于 file 网址,路径必须完全指定,且不得包含通配符。
  • 与匹配模式不同,内容设置模式可以指定端口号。如果指定了端口号,则该模式仅匹配具有该端口的网站。如果未指定端口号,则该模式会匹配所有端口。

模式优先级

如果有多条内容设置规则适用于特定网站,则具有更具体模式的规则优先适用。

例如,以下模式按优先级排序:

  1. https://www.example.com/*
  2. https://*.example.com/*(匹配 example.com 和所有子网域)
  3. <all_urls>(与所有网址匹配)

有三种通配符会影响模式的具体程度:

  • 端口中的通配符(例如 https://www.example.com:*/*
  • 方案中的通配符(例如 *://www.example.com:123/*
  • 主机名中的通配符(例如 https://*.example.com:123/*

如果一个模式在某个部分比另一个模式更具体,但在另一部分则不太具体,系统会按以下顺序检查不同的部分:主机名、方案、端口。例如,以下格式按优先级排序:

  1. https://www.example.com:*/* 指定主机名和方案。
  2. *:/www.example.com:123/* 不如 高,因为虽然它指定了主机名,但未指定方案。
  3. https://*.example.com:123/* 较低,因为虽然它指定了端口和 scheme,但主机名中包含通配符。

主要模式和次要模式

在决定应用哪项内容设置时,系统会考虑哪个网址取决于内容类型。 例如,对于 contentSettings.notifications,设置基于多功能框中显示的网址。此网址称为“主要”网址。

某些内容类型可以考虑使用其他网址。例如,是否允许网站设置 contentSettings.cookies 取决于 HTTP 请求的网址(在本例中为主要网址)以及多功能框中显示的网址(称为“次要”网址)。

如果多条规则都具有主要模式和次要模式,则主要模式更具体的规则优先。如果多条规则具有相同的主要模式,则具有更具体的次要模式的规则优先。例如,以下主/次模式对列表按优先级排序:

优先级主要模式次要模式
1https://www.moose.com/*https://www.wombat.com/*
2https://www.moose.com/*<all_urls>
3<all_urls>https://www.wombat.com/*
4<all_urls><all_urls>

图片内容设置不支持次要模式。

资源标识符

借助资源标识符,您可以为内容类型的特定子类型指定内容设置。目前,唯一支持资源标识符的内容类型是 contentSettings.plugins,其中资源标识符用于标识特定插件。应用内容设置时,系统会先检查特定插件的设置。如果未找到特定插件的设置,系统会检查插件的一般内容设置。

例如,如果某内容设置规则的资源标识符为 adobe-flash-player,模式为 <all_urls>,则即使模式 https://www.example.com/* 更具体,该规则也会优先于没有资源标识符且模式为 https://www.example.com/* 的规则。

您可以通过调用 contentSettings.ContentSetting.getResourceIdentifiers() 方法获取内容类型的资源标识符列表。返回的列表可能会因用户机器上安装的插件集而异,但 Chrome 会尽量在插件更新期间保持标识符稳定。

示例

如需试用此 API,请从 chrome-extension-samples 代码库中安装 contentSettings API 示例

类型

AutoVerifyContentSetting

Chrome 113 及更高版本

枚举

“允许”

“block”

CameraContentSetting

Chrome 46 及更高版本

枚举

“允许”

“block”

“ask”

ClipboardContentSetting

Chrome 121 及更高版本

枚举

“允许”

“block”

“ask”

ContentSetting

属性

  • 清除

    void

    清除此扩展程序设置的所有内容设置规则。

    clear 函数如下所示:

    (details: object) => {...}

    • 详细信息

      对象

      • 范围

        范围(可选)

        要清除的设置(默认值:常规)。

    • 返回

      Promise<void>

      Chrome 96 及更高版本
  • get

    void

    获取给定网址对的当前内容设置。

    get 函数如下所示:

    (details: object) => {...}

    • 详细信息

      对象

      • 无痕

        布尔值(可选)

        是否检查隐身会话的内容设置。(默认值为 false)

      • primaryUrl

        字符串

        应检索内容设置的主要网址。请注意,主网址的含义取决于内容类型。

      • resourceIdentifier

        用于检索设置的内容类型的更具体标识符。

      • secondaryUrl

        字符串(选填)

        应检索内容设置的辅助网址。默认为主要网址。请注意,辅助网址的含义取决于内容类型,并非所有内容类型都使用辅助网址。

    • 返回

      Promise<object>

      Chrome 96 及更高版本
  • getResourceIdentifiers

    void

    getResourceIdentifiers 函数如下所示:

    () => {...}

  • set

    void

    应用新的内容设置规则。

    set 函数如下所示:

    (details: object) => {...}

    • 详细信息

      对象

      • primaryPattern

        字符串

        主要网址的格式。如需详细了解模式的格式,请参阅内容设置模式

      • resourceIdentifier

        内容类型的资源标识符。

      • 范围

        范围(可选)

        设置的放置位置(默认值:常规)。

      • secondaryPattern

        字符串(选填)

        辅助网址的格式。默认设置为匹配所有网址。如需详细了解格式,请参阅内容设置格式

      • 设置

        任意

        相应规则所应用的设置。如需查看可能的值,请参阅各个 ContentSetting 对象的说明。

    • 返回

      Promise<void>

      Chrome 96 及更高版本

CookiesContentSetting

Chrome 44 及更高版本

枚举

“允许”

“block”

“session_only”

FullscreenContentSetting

Chrome 44 及更高版本

“允许”

ImagesContentSetting

Chrome 44 及更高版本

枚举

“允许”

“block”

JavascriptContentSetting

Chrome 44 及更高版本

枚举

“允许”

“block”

LocationContentSetting

Chrome 44 及更高版本

枚举

“允许”

“block”

“ask”

MicrophoneContentSetting

Chrome 46 及更高版本

枚举

“允许”

“block”

“ask”

MouselockContentSetting

Chrome 44 及更高版本

“允许”

MultipleAutomaticDownloadsContentSetting

Chrome 44 及更高版本

枚举

“允许”

“block”

“ask”

NotificationsContentSetting

Chrome 44 及更高版本

枚举

“允许”

“block”

“ask”

PluginsContentSetting

Chrome 44 及更高版本

“block”

PopupsContentSetting

Chrome 44 及更高版本

枚举

“允许”

“block”

PpapiBrokerContentSetting

Chrome 44 及更高版本

“block”

ResourceIdentifier

唯一使用资源标识符的内容类型是 contentSettings.plugins。如需了解详情,请参阅资源标识符

属性

  • 说明

    字符串(选填)

    资源的人类可读说明。

  • id

    字符串

    指定内容类型的资源标识符。

Scope

Chrome 44 及更高版本

ContentSetting 的范围。regular 之一:常规个人资料的设置(如果未在其他位置被覆盖,则无痕式个人资料会继承此设置);incognito\_session\_only:无痕式个人资料的设置,只能在无痕式会话期间设置,并在无痕式会话结束时删除(会覆盖常规设置)。

枚举

“常规”

"incognito_session_only"

属性

automaticDownloads

是否允许网站自动下载多个文件。以下值之一:allow:允许网站自动下载多个文件;block:不允许网站自动下载多个文件;ask:在网站想要自动下载第一个文件之后的其他文件时,询问用户。 默认值为 ask。主网址是顶级框架的网址。不使用辅助网址。

autoVerify

Chrome 113 及更高版本

是否允许网站使用 Private State Tokens APIallow 之一:允许网站使用 Private State Tokens API;block:阻止网站使用 Private State Tokens API。 默认值为 allow。调用 set() 时,主要网址格式必须为 <all_urls>。不使用辅助网址。

camera

Chrome 46 及更高版本

是否允许网站访问摄像头。以下值之一:allow:允许网站访问摄像头;block:不允许网站访问摄像头;ask:当网站想要访问摄像头时进行询问。 默认值为 ask。主网址是请求相机访问权限的文档的网址。不使用辅助网址。 注意:如果两个模式均为“<all_urls>”,则“allow”设置无效。

clipboard

Chrome 121 及更高版本

是否允许网站通过 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

Chrome 46 及更高版本

是否允许网站使用麦克风。以下选项之一:allow:允许网站访问麦克风;block:不允许网站访问麦克风;ask:在网站想要访问麦克风时进行询问。 默认值为 ask。主网址是指请求麦克风访问权限的文档的网址。不使用辅助网址。 注意:如果两个模式均为“<all_urls>”,则“allow”设置无效。

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() 的调用将被忽略。