百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

谷歌扩展开发教程(四)manifest 配置项参数说明

csdh11 2025-02-28 15:22 1 浏览

扩展manifest向浏览器提供有关扩展的信息,例如最重要的文件和扩展可能使用的功能。当有新的manifest版本时,扩展平台功能会发生变化。

Manifest V3 专注于该愿景的三大支柱:隐私、安全和性能,同时保留和改进我们的能力和网络基础。

配置

chrome插件的版本

"manifest_version": 3,

插件名称

"name": "ChromeName",

插件版本号

"version": "1.0.0",

插件描述, 132个字符以内

"description": "插件描述内容",

默认语言(如果当前浏览器设置的语言不存在多语言配置文件,则默认中文),Chrome插件的多语言只能根据当前浏览器设置的语言来设定,无法通过代码更改语言

"default_locale": "zh_CN",

key,发布插件后会给一个key,把那个key的值放这里,通常不需要使用此值。

"key": "xxx",

icon,浏览器扩展程序管理里面的图标、浏览器右侧插件图标点开的下拉菜单展示的已开启插件的图标、以及插件详情页的标签卡的那个小图标

"icons": {
    "16": "static/img/logo-16.png",
    "19": "static/img/logo-19.png",
    "38": "static/img/logo-38.png",
    "48": "static/img/logo-48.png",
    "128": "static/img/logo-128.png"
  },

内容安全政策,V2的value是字符串,V3是对象

extension_pages:此政策涵盖您的扩展程序中的页面,包括 html 文件和service workers。

sandbox:此政策涵盖您的扩展程序使用的任何沙盒扩展程序页面。

script-src, object-srcworker-src指令只能具有以下值:

  • self
  • none
  • 任何 localhost 源、(http://localhosthttp://127.0.0.1或这些域上的任何端口)
"content_security_policy": {
    //原文:此政策涵盖您的扩展程序中的页面,包括 html 文件和服务人员;具体不是很明白,但是参数值得是self,即当前自己
    "extension_pages": "script-src 'self'; object-src 'self'",

    //原文:此政策涵盖您的扩展程序使用的任何[沙盒扩展程序页面];具体不是很明白,但是参数值得是self,即当前自己
    "sandbox": "sandbox allow-scripts; script-src 'self'; object-src 'self'"
},

常驻后台脚本,后台脚本引入,v2是scripts:[xxx,xxx],可以引入多个js文件,v3是service_worker:'xxx',只能引入一个js,v3版最大的改动应该就是这里了,扩展程序管理界面的插件的那个“背景页”也将变成“Service Worker”,改动之后background.js将和浏览器完全分离,即无法调用window和ducoment对象。后面课程将详细进行介绍和演示。

Service Worker 是您的浏览器在后台运行的脚本,与网页分开,为不需要网页或用户交互的功能打开了大门。” 这项技术可以实现类似原生的体验,例如推送通知、丰富的离线支持、后台同步和开放网络上的“添加到主屏幕”。

"background": {
    "service_worker": "background.js"
},

注入内容脚本,值是个数组对象,可以有多个对象;

内容脚本是在网页上下文中运行的文件。通过使用标准文档对象模型(DOM),他们能够读取浏览器访问的网页的详细信息,对其进行更改,并将信息传递给其父扩展。

  • js:字符串数组;可选的。要注入匹配页面的 JavaScript 文件列表。这些是按照它们在这个数组中出现的顺序注入的。
  • css:字符串数组;可选的。要注入匹配页面的 CSS 文件列表。在为页面构建或显示任何 DOM 之前,它们按照它们在此数组中出现的顺序被注入。
  • matches:字符串数组 必需的。指定此内容脚本将被注入到哪些页面。有关这些字符串的语法的更多详细信息
  • match_about_blank:布尔值 可选的。脚本是否应该注入about:blank父框架或开启框架与matches. 默认为假
  • exclude_matches: 字符串数组 可选的。排除此内容脚本将被注入的页面。有关这些字符串的语法的更多详细信息
  • include_globs: 字符串数组 可选的。之后应用matches以仅包含那些也匹配此 glob 的 URL。
  • exclude_globs: 字符串数组 可选的。之后应用matches以排除与此 glob 匹配的 URL。
"content_scripts": [
    //每个对象代表一个注入的配置
    {
      //需要在指定页面注入的js脚本文件
      "js": [
        "xxx.js",
        "xxx.js",
      ],
       //需要注入js脚本文件的指定页面
      "matches": [
        "https://*.csdn.net/*",
        "https://*.xxx.com/*"
      ],
       //不允许注入js脚本文件的指定页面
       "exclude_matches": ["https://*.xxx.com/*"],
       //什么时候注入的js脚本,document_start=页面加载开始时,document_end=页面加载结束时
      "run_at": "document_end"
    }
  ],

API权限,需要使用某些API时需要设置该API权限才行

"permissions": [
      "contextMenus", //自定义创建右键菜单API
      "tabs", //tab选项卡API
      "storage", //缓存API
      "webRequest", //监听浏览器请求API
      ...
  ],

action: 控制 Google Chrome 工具栏中的扩展程序图标。必填选项。

为了使用chrome.actionAPI,您需要指定 "manifest_version"等于3或更高,并将action 密钥包含在您的清单文件中。

{
  "name": "Action Extension",
  ...
  "action": {
    "default_icon": {              // 可选
      "16": "images/icon16.png",   // 可选
      "24": "images/icon24.png",   // 可选
      "32": "images/icon32.png"    // 可选
    },
    "default_title": "Click Me",   // 可选, 显示在工具提示
    "default_popup": "popup.html"  // 可选
  },
  ...
}

web_accessible_resources 通过网络访问的资源,v2是提供一个数组,v3得提供数组对象,每个对象可以映射到一组资源到一组 URL 或扩展 ID

  "web_accessible_resources": [{
    //允许访问的资源路径,数组传多个参数
    "resources": ["*/img/xxx.png", "*/img/xxx2.png"],
    
    //允许访问资源的页面
    "matches": [
      "https://*.csdn.net/*",
      "https://*.xxx.com/*"
    ]
  }]

manifest.json

{
  //chrome插件的版本
  "manifest_version": 3,

  //插件名称
  "name": "ChromeName",

  //插件版本号
  "version": "1.0.0",

  //插件描述
  "description": "__MSG_Plugin_Desc__",

  //默认语言(如果当前浏览器设置的语言不存在多语言配置文件,则默认中文),Chrome插件的多语言只能根据当前浏览器设置的语言来设定,无法通过代码更改语言
  "default_locale": "zh_CN",

   //内容安全政策,V2的value是字符串,V3是对象
  "content_security_policy": {
    //原文:此政策涵盖您的扩展程序中的页面,包括 html 文件和服务人员;具体不是很明白,但是参数值得是self,即当前自己
    "extension_pages": "script-src 'self'; object-src 'self'",
    //原文:此政策涵盖您的扩展程序使用的任何[沙盒扩展程序页面];具体不是很明白,但是参数值得是self,即当前自己
    "sandbox": "sandbox allow-scripts; script-src 'self'; object-src 'self'"
  },

   //key,发布插件后会给一个key,把那个key的值放这里
  "key": "xxx",

  //icon,浏览器扩展程序管理里面的图标、浏览器右侧插件图标点开的下拉菜单展示的已开启插件的图标、以及插件详情页的标签卡的那个小图标
  "icons": {
    "16": "static/img/logo-16.png",
    "19": "static/img/logo-19.png",
    "38": "static/img/logo-38.png",
    "48": "static/img/logo-48.png",
    "128": "static/img/logo-128.png"
  },

  //背景页,后台脚本引入,v2是scripts:[xxx,xxx],可以引入多个js文件,v3是service_worker:'xxx',只能引入一个js,v3版最大的改动应该就是这里了,扩展程序管理界面的插件的那个“背景页”也将变成“Service Worker”,改动之后background.js将和浏览器完全分离,即无法调用window和ducoment对象
  //可以看介绍:
  //1、//developer.chrome.com/docs/extensions/mv3/intro/mv3-migration/#background-service-workers;
  //2、//developer.chrome.com/docs/extensions/mv3/migrating_to_service_workers/

  "background": {
    "service_worker": "background.js"
  },

  //注入脚本,值是个数组对象,可以有多个对象
  "content_scripts": [
    //每个对象代表一个注入的配置
    {
      //需要在指定页面注入的js脚本文件
      "js": [
        "xxx.js",
        "xxx.js",
      ],
       //需要注入js脚本文件的指定页面
      "matches": [
        "https://*.csdn.net/*",
        "https://*.xxx.com/*"
      ],
       //不允许注入js脚本文件的指定页面
       "exclude_matches": ["https://*.xxx.com/*"],
       //什么时候注入的js脚本,document_start=页面加载开始时,document_end=页面加载结束时
      "run_at": "document_end"
    }
  ],

  //API权限,需要使用某些API时需要设置该API权限才行
  "permissions": [
      "contextMenus", //自定义创建右键菜单API
      "tabs", //tab选项卡API
      "storage", //缓存API
      "webRequest", //监听浏览器请求API
      ...
  ],

  //主机权限,在背景页backgroud.js里面或者popup页面走请求时,请求域名的白名单权限,如果没添加的则请求会失败
  "host_permissions": [
    "https://*.csdn.net/*",
    "https://*.xxx.com/*"
  ],

  //动作API,原文:在 Manifest V2 中,有两种不同的 API 来实现操作: `"browser_action"` 和 `"page_action"` . 
  //这些 API 在引入时扮演了不同的角色,但随着时间的推移它们变得多余,因此在 Manifest V3 中,我们将它们统一为单个 `"action"` API; 
  //配置上action:{},可以是空对象,但是action这个配置得有,不然的话扩展程序管理界面的“Service Worker”将显示无效,
  //且无法点开“Service Worker”的开发者工具控制台以及点击插件图标时触发的这个方法会报错chrome.action.onClicked.addListener,

  "action": {

  },

  //通过网络访问的资源,v2是提供一个数组,v3得提供数组对象,每个对象可以映射到一组资源到一组 URL 或扩展 ID
  "web_accessible_resources": [{
    //允许访问的资源路径,数组传多个参数
    "resources": ["*/img/xxx.png", "*/img/xxx2.png"],
    
    //允许访问资源的页面
    "matches": [
      "https://*.csdn.net/*",
      "https://*.xxx.com/*"
    ]
  }]
}

相关推荐

当iPhone X遇上 Mate 10 Pro 怎么挑?

产品:Mate10Pro(全网通)华为手机1iPhoneX一出就遇上了对手Hello!大家好我是石头这里是zol。首先来看看我手里的这个,不是装x的意思,今天好多人欢天喜地的拿到了属于自己或者属...

谁是办公高手? 六款商务平板全推荐

1超低功耗联想Thinkpad10领衔ThinkPad的名字在笔记本上依然是高曝光率,从IBM到联想,它一直以来是商务、办公领域的不二人选,然而在平板电脑大行其道的今天,ThinkPad当然也不单...

如何仅用几行代码将微信4.0公测版转换成玲珑格式?

微信4.0(玲珑版)已上架如意玲珑应用商店!!!...

音乐研发必备:理解 MIDI 协议与标准 MIDI 文件格式

1.MIDI简介...

HEIF格式可以节约50%的空间!质量会有影响吗?

关于手机1亿像素到底有没有必要,争议肯定是存在的,但无法回避的一点是随着像素的成倍增加,一张照片十几MB成了常事,这必将给本就不太宽裕的存储容量造成压力,这种压力又会转嫁到用户身上,让他们不得不花更多...

「干货分享」30个前端知识技能提升的资源网站

今天给小伙伴们分享30个前端相关学习资源网站及一些在线小工具,希望能帮助到大家。CSS相关1、css精灵牛|在线图片CSS生成工具。...

用Facebook引流Shopify独立站,如何优化Facebook商户页面?

什么是FacebookBusinessPage?FacebookBusinessPage是官方的称号,其实你可以简单理解为facebookbusinesspage就是微信公众账户,而我们...

玩转手机摄影 nubia Z9 mini新品首测

1Z9系列新品nubiaZ9mini发布会开始之前的邀请函总能透露出很多内容,或者说我们总会特意解读出很多内容。nubia此前发出的3月26日智能手机新品发布会的邀请函很显然再一次着重强调了其产品...

影院看片怕座位不好?那买个盒子在家看

着消费者对高清播放器的需求的不断增加,高清播放器的功能也在不断得到提升。以前看电影的时候相信很多人更喜欢去电影院里观看,但是有时候去电影院的人太多买不到好位子也会让不少人感到扫兴。现在随着技术的革新,...

今天你买了么?不入后悔的8款平板推荐

随着高考大战的落幕,对于广大学生朋友们来说正真的暑假终于来了!这个假期想要外出旅行或是居家畅玩,没有一款便携式全能娱乐利器的平板电脑怎么能叫放假呢?正直京东618购物季即将到来的日子,相信你也不会错过...

Cursor使用指南:释放AI编程的无限潜能

Cursor简介...

谁说轻薄本缺乏生产力?没体验过别乱说

笔记本电脑轻薄化一直是各大厂商们不断努力的方向,不过早前的轻薄笔记本电脑会受制于技术方面的限制,无法将高能耗的CPU以及显卡塞入轻薄的机身内。为了能给这些芯片散热、供电,制造商们不得不对这些芯片的功耗...

通告ImageMagick再爆核心漏洞 站长小心

目前所有版本的GraphicsMagick和ImageMagick都支持打开文件,当文件名的第一个字符为“|”,则文件名会被传递给shell程序执行,导致(可能远程)代码执行。文件打开操作位于源代码文...

《玻璃之花与坏掉的世界》再曝新宣传片

雨文冰璃发表于昨天22:56【新闻】《玻璃之花与坏掉的世界》再曝新宣传片http://comic.qq.com/a/20151122/016784.htmPONYCANYON和A-1Pictu...

7 招教你轻松搭建以图搜图系统

作者|小龙责编|胡巍巍当您听到“以图搜图”时,是否首先想到了百度、Google等搜索引擎的以图搜图功能呢?事实上,您完全可以搭建一个属于自己的以图搜图系统:自己建立图片库;自己选择一张图片到...