The activeTab permission(activeTab 权限)
当用户调用扩展程序时,activeTab 权限允许扩展程序临时访问当前活动的选项卡 - 例如通过单击其操作(action)。当用户在该页面上时,对该选项卡的访问持续存在,并在用户导航离开或关闭该选项卡时被撤销。
这可以作为 <all_urls>
的许多用途的替代方法,但在安装过程中不显示警告消息:
注意:从 M72 开始,将授予 activeTab 权限,直到用户导航到不同的来源。也就是说,如果用户在 https://example.com 上调用扩展程序,然后导航到 https://example.com/foo,该扩展程序将继续访问该页面。如果用户导航到 https://chromium.org,访问将被撤销。
没有活动标签(activeTab
):
使用 activeTab
:
# Example
请参阅 Page Redder 示例扩展:
{
"name": "Page Redder",
"version": "2.0",
"permissions": [
"activeTab"
],
"background": {
"service_worker": "background.js"
},
"action": {
"default_title": "Make this page red"
},
"manifest_version": 3
}
// Called when the user clicks on the action.
chrome.action.onClicked.addListener(function(tab) {
// No tabs or host permissions needed!
console.log('Turning ' + tab.url + ' red!');
chrome.scripting.executeScript({
code: 'document.body.style.backgroundColor="red"'
});
});
# Motivation(动机)
考虑一个具有操作(action)和上下文菜单项(menu item)的网络剪辑扩展。这个扩展可能只有在它的浏览器操作被点击时,或者当它的上下文菜单项被执行时才真正需要访问选项卡。
如果没有 activeTab
,这个扩展需要请求对每个网站的完全、持久的访问,这样它才能在用户碰巧调用时完成它的工作。委托给这样一个简单的扩展是很大的力量。如果扩展程序遭到破坏,攻击者就可以访问扩展程序拥有的所有内容。
相比之下,具有 activeTab
权限的扩展程序仅响应显式用户手势获得对选项卡的访问。如果扩展程序遭到破坏,攻击者将需要等待用户调用扩展程序才能获得访问权限。并且该访问仅持续到选项卡被导航或关闭为止。
# activeTab 允许什么(What activeTab allows)
虽然为选项卡启用了 activeTab
权限,但扩展程序可以:
- 在该选项卡上调用 scripting.insertCSS。
- 通过返回 tabs.Tab 对象的 API 获取该选项卡的 URL、标题和图标(本质上,
activeTab
临时授予选项(tabs)卡权限)。 - 使用 webRequest API 将选项卡中的网络请求拦截到选项卡的主框架源。该扩展程序临时获取选项卡主框架来源的主机权限。
# 调用 activeTab(Invoking activeTab)
以下用户手势启用 activeTab
:
- 执行一个动作(action)
- 执行上下文菜单项(context menu item)
- 从命令(commands API) API 执行键盘快捷键
- 接受来自多功能框(omnibox API) API 的建议
By.一粒技术服务