chrome extension tabs及activeTab详解

最近在做插件开发的过程中发现经常有朋友问到tabs和activeTab权限有什么区别,该如何使用,好像不申请tabs或者activeTab也能使用该权限

image.png

image.png

  1. 不声明tabs和activeTab权限时,使用query能获取到哪些信息?
    API调用:
chrome.tabs.query({}, data => {
  console.log("tabs query:", data);
});

返回内容:

[
    {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "groupId": -1,
        "height": 1271,
        "highlighted": false,
        "id": 1943063070,
        "incognito": false,
        "index": 0,
        "mutedInfo": {
            "muted": false
        },
        "pinned": true,
        "selected": false,
        "status": "complete",
        "width": 2560,
        "windowId": 1943063069
    },
    {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "groupId": -1,
        "height": 1271,
        "highlighted": false,
        "id": 1943063156,
        "incognito": false,
        "index": 1,
        "mutedInfo": {
            "muted": false
        },
        "pinned": false,
        "selected": false,
        "status": "complete",
        "width": 2560,
        "windowId": 1943063069
    },
    {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "groupId": -1,
        "height": 1271,
        "highlighted": false,
        "id": 1943063599,
        "incognito": false,
        "index": 2,
        "mutedInfo": {
            "muted": false
        },
        "pinned": false,
        "selected": false,
        "status": "complete",
        "width": 1339,
        "windowId": 1943063069
    }
]
  1. 不声明tabs和activeTab权限时有某域名的主机权限时,使用query能获取到哪些信息?
"host_permissions": [
  "https://github.com/*"
]
chrome.tabs.query({}, data => {
  console.log("tabs query:", data);
});

此时我打开了https://github.com/

[
   {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "groupId": -1,
        "height": 1271,
        "highlighted": false,
        "id": 1943063070,
        "incognito": false,
        "index": 0,
        "mutedInfo": {
            "muted": false
        },
        "pinned": true,
        "selected": false,
        "status": "complete",
        "width": 2560,
        "windowId": 1943063069
    },
    {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "groupId": -1,
        "height": 1271,
        "highlighted": false,
        "id": 1943063156,
        "incognito": false,
        "index": 1,
        "mutedInfo": {
            "muted": false
        },
        "pinned": false,
        "selected": false,
        "status": "complete",
        "width": 2560,
        "windowId": 1943063069
    },
    {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "favIconUrl": "https://github.githubassets.com/favicons/favicon.svg",
        "groupId": -1,
        "height": 1271,
        "highlighted": false,
        "id": 1943063634,
        "incognito": false,
        "index": 11,
        "mutedInfo": {
            "muted": false
        },
        "pinned": false,
        "selected": false,
        "status": "complete",
        "title": "GitHub",
        "url": "https://github.com/",
        "width": 2560,
        "windowId": 1943063069
    }
]

可以看到,没有主机权限时,是获取不到title,favIconUrl及url的
3. 当permission中有tabs权限时

"permissions": [
  "tabs"
]
[
    {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "favIconUrl": "https://cdn.oaistatic.com/_next/static/media/favicon-32x32.be48395e.png",
        "groupId": -1,
        "height": 1271,
        "highlighted": false,
        "id": 1943063070,
        "incognito": false,
        "index": 0,
        "mutedInfo": {
            "muted": false
        },
        "pinned": true,
        "selected": false,
        "status": "complete",
        "title": "获取Auto.js页面文字",
        "url": "https://chat.openai.com/c/38178a33-a3e9-432b-8187-fa79fd582522",
        "width": 2560,
        "windowId": 1943063069
    },
    {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "favIconUrl": "https://www.baidu.com/favicon.ico",
        "groupId": -1,
        "height": 1271,
        "highlighted": false,
        "id": 1943063159,
        "incognito": false,
        "index": 3,
        "mutedInfo": {
            "muted": false
        },
        "pinned": false,
        "selected": false,
        "status": "complete",
        "title": "百度一下,你就知道",
        "url": "https://www.baidu.com/",
        "width": 1620,
        "windowId": 1943063069
    },
    {
        "active": true,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "favIconUrl": "https://github.githubassets.com/favicons/favicon.svg",
        "groupId": -1,
        "height": 1271,
        "highlighted": true,
        "id": 1943063634,
        "incognito": false,
        "index": 11,
        "mutedInfo": {
            "muted": false
        },
        "pinned": false,
        "selected": true,
        "status": "complete",
        "title": "GitHub",
        "url": "https://github.com/",
        "width": 2560,
        "windowId": 1943063069
    }
]

可以看到能够获取到所有的favIconUrl、url、及title信息

  1. 当permission中有activeTab权限时
[
    {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "groupId": -1,
        "height": 1271,
        "highlighted": false,
        "id": 1943063070,
        "incognito": false,
        "index": 0,
        "mutedInfo": {
            "muted": false
        },
        "pinned": true,
        "selected": false,
        "status": "complete",
        "width": 2560,
        "windowId": 1943063069
    },
    {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": true,
        "groupId": -1,
        "height": 0,
        "highlighted": false,
        "id": 1943063716,
        "incognito": false,
        "index": 1,
        "mutedInfo": {
            "muted": false
        },
        "pinned": false,
        "selected": false,
        "status": "unloaded",
        "width": 0,
        "windowId": 1943063069
    },
    {
        "active": false,
        "audible": false,
        "autoDiscardable": true,
        "discarded": false,
        "groupId": -1,
        "height": 1271,
        "highlighted": false,
        "id": 1943063599,
        "incognito": false,
        "index": 2,
        "mutedInfo": {
            "muted": false
        },
        "pinned": false,
        "selected": false,
        "status": "complete",
        "width": 1339,
        "windowId": 1943063069
    }
]

可以看到什么信息都获取不到
所有activeTab这个权限没有任何作用吗?
并不是:
当我在某个网页点击了browser action按钮后,能够获取到该信息:

{
    "active": false,
    "audible": false,
    "autoDiscardable": true,
    "discarded": false,
    "favIconUrl": "",
    "groupId": -1,
    "height": 1271,
    "highlighted": false,
    "id": 1943063602,
    "incognito": false,
    "index": 4,
    "mutedInfo": {
        "muted": false
    },
    "pinned": false,
    "selected": false,
    "status": "complete",
    "title": "扩展程序",
    "url": "chrome://extensions/",
    "width": 2560,
    "windowId": 1943063069
}

官方的解释:
image.png

总结:

  1. tabs大多数功能无需任何权限即可使用。例如:创建新标签页、重新加载标签页、导航到其他网址,等等。但是获取标签的favIconUrl、url、及title信息需要增加host_permission
  2. 声明tabs权限用户会收到提示,同时你也能获取到所有标签页的信息不需要额外申请host_permission
  3. 声明activeTab用户不会收到提示,想要获取favIconUrl、url、及title信息可以通过多种方式,比如:申请host_permission、用户点击了browser action,用户在该网页上使用了插件提供的上下文菜单、用户使用了插件提供的快捷键、页面中使用了omnibox API

参考文档:

https://developer.chrome.com/docs/extensions/reference/api/tabs?hl=zh-cn
https://developer.chrome.com/docs/extensions/develop/concepts/activeTab?hl=zh-cn

新选项卡立即打开,而不是在后台。 ***根据要求提供的新功能***选项卡激活现在支持书签! ***有关权限的问题***请阅读所需权限的详细说明以及为什么需要它们。没有它们,选项卡激活将无法按所述方式工作。绝对不会更改或收集任何数据 ----------------------------------------默认情况下,Chrome在后台打开新标签页并没有提供立即切换到它们的选项。使用“选项卡激活”时,新选项卡将立即打开,而不是在后台打开。覆盖选项卡在后台激活并打开新选项卡,在打开新选项卡的同时按Shift键。标签激活功能可以有效地扭转Chrome的新标签焦点行为 ----------------------------------------权限阅读和更改书签:需要激活带书签的标签(仅读取书签,不更改)在访问的网站上读取和更改您的所有数据:需要检测按下Shift键的时间(未访问其他网站数据)由于Chrome扩展API的限制,具有是否按Shift键或是否为新选项卡的URL添加了书签是检测请求的权限的唯一方法。绝对不会更改或收集任何数据 ----------------------------------------更改版本2.0.0根据要求,书签为现在受支持并立即打开。版本1.2.0:新标签页的位置与Chrome的行为更加匹配。新的活动标签在上一个标签的右侧打开,新的背景标签在末尾打开。版本1.1.0:Shift键将覆盖Tab激活并在后台打开新的选项卡。版本1.0.0:初始版本。 支持语言:English (United States)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值