"activeTab"
权限允许扩展程序在
用户调用该扩展程序 - 例如,点击其操作。访问该标签页
有效期在用户位于相应页面时有效,在用户离开页面或关闭标签页时失效。
例如,如果用户通过 https://example.com 调用扩展程序,然后
转到 https://example.com/foo,该扩展程序仍能继续访问该网页。如果
当用户前往 https://chromium.org 时,相关访问权限会被撤消。
这是 "<all_urls>"
的多种用法,但会显示无警告消息。
:
不使用 "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。该扩展程序会暂时获取标签页主框架源的主机权限。
调用 activityTab
以下用户手势可启用 "activeTab"
权限:
- 执行操作
- 执行上下文菜单项
- 通过 commands API 执行键盘快捷键
- 通过多功能框 API 接受建议