“activeTab”权限

"activeTab" 权限可让扩展程序在用户调用该扩展程序时(例如,通过点击其操作)临时访问当前活跃的标签页。用户访问该标签页时,对标签页的访问权限会一直有效;当用户离开页面或关闭标签页时,访问权限便会撤消。例如,如果用户在 https://example.com 上调用扩展程序,然后导航到 https://example.com/foo,该扩展程序就可以继续访问该网页。如果用户前往 https://chromium.org,则访问权限会被撤消。

这可用作 "<all_urls>" 的许多用法的替代方案,但会在安装过程中显示无警告消息

不使用 "activeTab"

不使用 ActiveTab

使用 "activeTab" 进行更新:

使用 ActiveTab

示例

请参阅 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 (!tab.url.includes('chrome://')) {
    chrome.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

设计初衷

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

如果没有 "activeTab",此扩展程序需要请求对所有网站进行永久的全面访问权限,以便在被用户调用时也能正常工作。将它委托给这种简单的扩展程序就很强大。如果扩展程序遭到入侵,攻击者便可以访问此扩展程序拥有的所有资源。

相比之下,具有 "activeTab" 权限的扩展程序仅在响应显式用户手势时才会获取对标签页的访问权限。如果扩展程序遭到破解,攻击者需要等待用户调用扩展程序才能获得访问权限。而且该访问权限仅在标签页用户导航或关闭之前一直有效。

“activeTab”允许的用途

针对标签页启用 "activeTab" 权限后,扩展程序可以:

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

正在调用 ActiveTab

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