chrome extension 谷歌插件 manifest 几个permissions深度解读 v2 v3 版本

参考manifest v3的全家福配置参数列表

https://developer.chrome.com/docs/extensions/mv3/manifest/

permissions 谷歌文档

https://developer.chrome.com/docs/extensions/reference/permissions/

谷歌建议,在描述页面中要尽量将需要的权限,以及为何需要这些权限详细说明下,这样符合谷歌的要求,又尊重用户,是一个很好的建议

chrome extension 谷歌插件 manifest 几个permissions深度解读 v2 v3 版本_第1张图片

permissions 主要指插件API的一些调用授权

activeTab
alarms
background
bookmarks
browserSettings
browsingData
captivePortal
clipboardRead
clipboardWrite
contentSettings
contextMenus
contextualIdentities
cookies
debugger
dns
downloads
downloads.open
find
geolocation
history
identity
idle
management
menus
menus.overrideContext
nativeMessaging
notifications
pageCapture
pkcs11
privacy
proxy
scripting
search
sessions
storage
tabHide
tabs
theme
topSites
unlimitedStorage
webNavigation
webRequest
webRequestBlocking

host_permissions 与 background 之间的关系

  1. 如果 background 请求的域名是允许跨域的,则不需要在 host_permissions 中配置该域名

  2. 如果 background 请求的域名是跨域的,则必须要在 host_permissions 中追加该域名

{
  "host_permissions": ["*://*.whatsapp.com/*", "*://*.baidu.com/*"],
}

否则报跨域错误

chrome extension 谷歌插件 manifest 几个permissions深度解读 v2 v3 版本_第2张图片

  1. 允许跨域的域名并且 host_permissions 也添加了,仍然报错,有可能是 https 证书谷歌不认可

chrome extension 谷歌插件 manifest 几个permissions深度解读 v2 v3 版本_第3张图片

实际错误要关掉这个右侧这个详情框,在 status 字段中 hover 查看,发现是证书错误,此时只有配置一个阿里云的 ssl 证书域名,就解决了

chrome extension 谷歌插件 manifest 几个permissions深度解读 v2 v3 版本_第4张图片

v2 的 host_permissions 是和 permissions 混在一起的 效果和v3稍微有点出入,但大体相同

host_permissions 和 request 请求没有关系,也即 background 对于 request 无关系,在 backgroud 中没有跨域的概念,就相当于我们用 python 的 request 去请求任何一个 url 一样,对于 content scripts 的中跨域请求来说,除非后端允许跨域,否则不能请求,而且必须是 https 协议的,http 协议会被浏览器自动纠正成 https,应该哪里有个配置可以解决这个问题,但暂时还没找到

  1. XMLHttpRequest并在没有跨域限制的情况下获取对这些来源的访问(即使对于从内容脚本发出的请求)(现在已经不能从content scripts中绕过跨域请求了)

  2. 无需“选项卡”权限即可读取特定于选项卡的元数据的能力,例如对象的url、title和favIconUrl属性tabs.Tab

  3. 以编程方式(使用tabs.executeScript())将脚本注入从这些来源提供的页面的能力

  4. webrequest从这些主机的 API接收事件的能力

  5. cookies只要"cookies"还包括 API 权限,就可以使用 API 访问该主机的 cookie 。

  6. 绕过对主机被指定为完整域或使用通配符的扩展页面的跟踪保护。但是,内容脚本只能绕过对使用完整域指定的主机的跟踪保护。

v3中的host_permissions 是和permissions分离的

读取或修改主机数据的 API,例如cookies、webRequest和tabs。这个key是一个字符串数组,每个字符串都是一个权限请求。

浏览器可能会在安装时提示用户授予扩展访问此主机数据的权限。无论是否提示用户(有可能不提醒,之后提醒),浏览器都允许用户在安装后控制扩展程序的主机权限:根据需要授予或撤销它们。

特性同v2,没有什么变化

  1. 这种重点提出的就是如果想让某个host中执行tabs.executeScript() 必须要获取host_permissions权限;

  2. 主要还是应用在cookie方面,例如获取waplus.io的cookie变化;

  3. content scripts 脚本注入没有这个权限要求,是直接注入进去的,所以动态注入脚本和直接注入脚本还是有点区别的;

optional_permissions 可选权限的使用

对于权限的时候,还是尽量少的向用户索要,除非万不得已,即使需要也尽可能作为可选权限来想用户所求

interface Permissions {
    /**
     * Optional.
     */
    permissions?: Manifest.OptionalPermission[];

    /**
     * Optional.
     */
    origins?: Manifest.MatchPattern[];
}document.querySelector('#my-button').addEventListener('click', (event) => {
  // Permissions must be requested from inside a user gesture, like a button's
  // click handler.
  chrome.permissions.request({
    permissions: ['tabs'],
    origins: ['https://www.google.com/']
  }, (granted) => {
    // The callback argument will be true if the user granted the permissions.
    if (granted) {
      doSomething();
    } else {
      doSomethingElse();
    }
  });
});
// 下面的意思是作为可选权限,permisssions 和 origins 可以只传一个,
// 两者不是同时存在的 这个一定要在使用中注意
// 此外tabs 是具有一部分host_permissions权限的能力
chrome.permissions.request(permissions: Permissions): Promise;
interface Permissions {
  /**
    * Optional.
    */
  permissions?: Manifest.OptionalPermission[];

  /**
    * Optional.
    */
  origins?: Manifest.MatchPattern[];
}

容易被忽略的v3权限 optional_host_permissions 权限

这个权限是的确被放在 v3 manifest 参数列表中的,但是文档中只字未提,但的确是有用的一个字段,这里表达的意思就是,有些 host_permissions 权限在某些动作触发时,会访问他的数据,这样也能很好地绕过一上来就要 host_permissions 权限的问题。

用法就是 optional_permissions 申请逻辑 + host_permissions 效果的结合

设计到需要用 host_permissions 的插件 api 都会明显声明自己的需求,例如 tabs,cookies

chrome extension 谷歌插件 manifest 几个permissions深度解读 v2 v3 版本_第5张图片

Cookie

chrome extension 谷歌插件 manifest 几个permissions深度解读 v2 v3 版本_第6张图片

你可能感兴趣的:(plugin,chrome)