WebExtension中的manifest.json


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/02/09/WebExtension%E4%B8%AD%E7%9A%84manifest-json/

摘要

本文主要讲述了:

  1. chrome_settings_overrides
  2. chrome_url_overrides
  3. permissions

正文

chrome_settings_overrides

homepage

设置主页

示例:

1
2
3
4
5
6
7
8
9
10
11
12
{
"manifest_version": 2,
"name": "My extension",
"description": "description",
"version": "0.0.1",
"icons": {
"64": "icons/icon.png"
},
"chrome_settings_overrides": {
"homepage": "https://example.com/"
}
}

search_provider

设置搜索引擎

image_url

图片搜索的 URL 模板

注:如果不设置image_url,那么鼠标右键对准图片时,上下文菜单中不会出现搜索图片

image_url_post_params

以 POST 形式提交的图片搜索参数

  • {google:imageThumbnail}:略缩图
  • {google:imageOriginalWidth} 原始图片的宽度
  • {google:imageOriginalHeight} 原始图片的高度

注:

  1. 通过 Fiddler 抓包得知:{google:imageThumbnail}为没有文件名的二进制文件,可以近似看作:FormData实例中,filename为空字符串的Blob实例或File实例
  2. 由于百度的以图搜图接口必须提供filename,因此该接口无法作为image_url

is_default

  • 若为false,则彻底丧失作为默认搜索引擎的可能,且使用该搜索引擎之前需要手动激活
  • 若为true,则使用search_provider.keyword之前需要手动激活

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"manifest_version": 2,
"name": "My extension",
"description": "description",
"version": "0.0.1",
"icons": {
"64": "icons/icon.png"
},
"chrome_settings_overrides": {
"search_provider": {
"name": "jsweibo's search",
"keyword": "j",
"encoding": "UTF-8",
"favicon_url": "https://jsweibo.github.io/search/favicon.png",
"search_url": "https://jsweibo.github.io/search/?q={searchTerms}",
"suggest_url": "https://suggestion.baidu.com/su?action=opensearch&wd={searchTerms}",
"image_url": "https://yandex.com/images/search?rpt=imageview",
"image_url_post_params": "upfile={google:imageThumbnail},original_width={google:imageOriginalWidth},original_height={google:imageOriginalHeight},prg=1",
"is_default": true
}
}
}

chrome_url_overrides

注:同一个扩展能且只能重写以下页面中的一个

  • bookmarks
  • history
  • newtab

示例:用扩展中的本地页面重写新标签页

1
2
3
4
5
6
7
8
9
10
11
12
{
"manifest_version": 2,
"name": "My extension",
"description": "description",
"version": "0.0.1",
"icons": {
"64": "icons/icon.png"
},
"chrome_url_overrides": {
"newtab": "newtab/index.html"
}
}

permissions

host 许可

示例:匹配 URI 方案为httphttpswswss的 URL

1
2
3
{
"permissions": ["*://*/*"]
}

示例:匹配所有的 URL

1
2
3
{
"permissions": ["<all_urls>"]
}

activeTab 许可

如果扩展获得了activeTab许可,当用户和扩展进行以下交互时:

  • 用户点击扩展的 browserAction 或 pageAction
  • 用户点击扩展在上下文菜单中注册的项
  • 用户使用扩展注册的快捷键

在当前标签页,扩展会被授予额外的特权:

  • 针对当前标签页使用browser.tabs.insertCSS()browser.tabs.removeCSS()browser.tabs.executeScript()
  • 获得标签页信息时,额外获得当前标签页的tab.urltab.titletab.favIconUrl

设计activeTab许可的目的,就是为了尽可能安全地授予许可

应用场景:

  • 虽然授予host许可就能针对任意标签页使用browser.tabs.insertCSS()browser.tabs.removeCSS()browser.tabs.executeScript(),但扩展实际上只需要针对当前页使用
  • 虽然授予host许可或tabs许可就能查询到任意标签页的tab.urltab.titletab.favIconUrl,但是扩展实际上只需要当前页的

Chrome

在 Chrome 中,即使扩展没有申请activeTab许可,一旦用户和扩展进行以下交互,在回调函数中,扩展也能额外获得当前标签页的tab.urltab.titletab.favIconUrl

  • 用户点击扩展的 browserAction 或 pageAction
  • 用户点击扩展在上下文菜单中注册的项
  • 用户使用扩展注册的快捷键

参考资料

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/02/09/WebExtension%E4%B8%AD%E7%9A%84manifest-json/


本文对你有帮助?请支持我


支付宝
微信