“activeTab”权限

"activeTab" 权限可让扩展程序在用户调用扩展程序(例如点击其操作)时临时访问当前活跃的标签页。对标签页的访问权限在用户位于相应网页上时有效,并在用户离开或关闭标签页时被撤消。 例如,如果用户在 https://example.com 上调用扩展程序,然后前往 https://example.com/foo,则该扩展程序将继续有权访问该网页。如果用户前往 https://chromium.org,则访问权限会被撤消。

此方法可替代 "<all_urls>" 的许多用途,但在安装期间不显示警告消息

不含 "activeTab"

不使用 activeTab

使用 "activeTab" 进行更新:

使用 activeTab

无法访问受限页面,例如 chrome:// 页面。

示例

请参阅 Page Redder 示例扩展程序:

manifest.json:

{
  "name": "Page Redder",
  "version": "2.0",
  "permissions": [
    "activeTab",
    "scripting"
  ],
  "background": {
    "service_worker": "service-worker.js"
  },
  "action": {
    "default_title": "Make this page red"
  },
  "manifest_version": 3
}

service-worker

function reddenPage() {
  document.body.style.backgroundColor = 'red';
}

chrome.action.onClicked.addListener((tab) => {
  // If the tab URL is not set, it is a restricted page.
  if (tab.url) {
    chrome.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

动机

假设有一个网页剪藏扩展程序,其中包含操作上下文菜单项。此扩展程序可能只需要在点击其操作或执行其上下文菜单项时访问标签页。

如果没有 "activeTab",此扩展程序将需要请求对每个网站的完全持久访问权限,以便在用户恰好调用它时能够正常运行。将如此大的权力委托给如此简单的扩展程序,如果扩展程序遭到入侵,攻击者会获得该扩展程序所拥有的所有访问权限。

相比之下,具有 "activeTab" 权限的扩展程序仅在响应明确的用户手势时获取对标签页的访问权限。如果扩展程序遭到入侵,攻击者需要等待用户调用扩展程序,然后才能获得访问权限。并且该访问权限仅在标签页被导航或关闭之前有效。

“activeTab”允许执行的操作

当某个标签页启用 "activeTab" 权限后,扩展程序可以:

  • 如果还声明了 "scripting" 权限(如上例所示),请在该标签页上调用 scripting.insertCSS()scripting.executeScript()
  • 通过返回 tabs.Tab 对象(本质上,"activeTab" 临时授予主机权限)的 API 获取相应标签页的网址、标题和 favicon。
  • 使用 webRequest API 拦截标签页中发送到标签页主框架来源的网络请求。扩展程序会暂时获得标签页主框架来源的主机权限。

调用 activeTab

以下用户手势可启用 "activeTab" 权限: