chrome扩展:manifest.json文件详解

2023-05-16

manifest.json是扩展的配置文件,指明了扩展的各种信息。

一个manifest.json格式如下:

{

    // 必须的字段3

    "name": "MyExtension", // 扩展名称

    "version": "1.0", // 版本。由14个整数构成。多个整数间用"."隔开

    "manifest_version": 2, // manifest文件版本号。Chrome18开始必须为2

    // 建议提供的字段3

    "description": "",   // 描述。132个字符以内

    "icons": {

       "16": "image/icon-16.png",

       "48": "image/icon-48.png",

       "128": "image/icon-128.png"

    }, //扩展图标。推荐大小1648128

    "default_locale": "en", // 国际化

    // 以下字段多选一,或者都不提供

    "browser_action": {

       "default_icon": "image/icon-128.png",

        "default_title": "My Test",

       "default_popup": "html/browser.html"

    }, //地址栏右侧图标管理。含图标及弹出页面的设置等

    "page_action": {

        "default_icon": "image/icon-48.png",

        "default_title": "My Test",

        "default_popup": "html/page.html"

    }, //地址栏最后附加图标。含图标及行为等

    "theme": {}, // 主题,用于更改整个浏览器的外观

    "app": {}, // 指定扩展需要跳转到的URL

    // 根据需要提供

    "background": {

       "scripts": [

           "lib/jquery-3.3.1.min.js",

           "js/background.js"

       ] ,

        "page":"html/background.html"

    }, // 指定扩展进程的background运行环境

    "chrome_url_overrides": {

       "pageToOverride": "html/overrides.html"

    }, //替换页面。详见注释1

    "content_scripts": [{

      "matches": ["https://www.baidu.com/*"],

      "css": ["css/mystyles.css"],

      "js": ["lib/jquery-3.3.1.min.js", "js/content.js"]

    }], // 指定在web页面运行的脚本。详见注释2

    "content_security_policy": ""// 安全策略

    "file_browser_handlers": [],   

    "homepage_url": "http://xxx", // 扩展的官方主页

    "incognito": "spanning", // "split"。详见注释3

    "intents": {}, // 用户操作意图描述

    "key": "", // 扩展唯一标识。不需要人为指定

    "minimum_chrome_version": "1.0", // 扩展所需chrome的最小版本

    "nacl_modules": [],  // 消息与本地处理模块映射

    "offline_enabled": true, // 是否允许脱机运行

    "omnibox": {

       "keyword": "myKey"

    }, //ominbox即地址栏。用于响应地址栏的输入事件

    "options_page": "aFile.html", // 选项页。用于在扩展管理页面跳转到选项设置

    "permissions": [

       "https://www.baidu.com/*",

       "background",

       "tabs"

    ], //权限。详见注释4

    "plugins": [{

       "path": "extension_plugin.dll",

       "public": true

    }], // 扩展。可调用第三方扩展

    "requirements": {}, // 指定所需要的特殊技术。目前只支持"3D"

    "update_url": "http://path/to/updateInfo.xml",   // 自动升级

    "web_accessible_resources": [] // 指定资源路径,为String数组

}

注释:

1.    chrome_url_overrides:替换页面。用于将原定显示的页面替换为自定义的页面。其取值有4个:

①   pageToOverride:页面。

②   bookmarks:书签。

③   history:历史。

④   newtab:新标签页。

2.    content_scripts:指定要向Web页面内注入的脚本。可注入多个css与js。

扩展本身的运行环境为background,而background与web页面的运行环境是相互独立的。若希望在扩展中对web页面进行修改,那就需要使用content_scripts。

content_scripts运行在一个隔离环境中,即与background和web页面运行环境都独立。但content_scripts共享了web页面的DOM,所以content_scripts可以对web页面DOM进行操作。然而共享仅限于DOM,不包括任何js变量与函数。同理,web页面的js也不能访问content_scripts中的js变量与函数。于是,二者引入的库也不能共享,各自使用各自的库。

借助事件的监听与触发,content_scripts可以与web页面的js进行通信。

content_scripts格式如下:

"content_scripts": [{

      "matches": ["https://www.baidu.com/*"],

      "css": ["mystyles.css"],

      "js": ["lib/jquery-3.3.1.min.js", "js/content.js"],

      "run_at": "document_idle"

}],

其数组元素的字段有:

①   matches:String数组,必须。定义content_scripts对哪些页面生效。其规则符合permissions的模式匹配。

②   css:String数组,可选。定义哪些css文件在web页面DOM创建前注入到web页面中。

③   js:String数组,可选。定义哪些js文件注入到web页面中。其js文件的注入顺序与数组中定义的顺序相同。至于这些js与web页面中所定义js的顺序关系,取决于run_at字段。

④   run_atString,可选。定义content_scripts的注入时机,从而影响到js与web页面所定义js的顺序关系。取值有:

·document_start:所有css加载完毕,但DOM尚未创建时。

·document_end:DOM创建完成,但图片及frame等子资源尚未加载时。

·document_idle:document_end之后,window.onload之前。

      默认是document_idle,也就是content_scripts的js都罗列在web页面的js之后。

⑤   all_frames:boolean,可选。是否运行在页面所有的frame中。若为false,则只运行在最上层的frame中。默认为false。

⑥   include_globs:String数组,可选。用于规定页面匹配的白名单。一个URL,必须同时满足:匹配matches,匹配include_globs白名单,不匹配exclude_globs黑名单这三个条件才可以。注意include_globs和exclude_globs中的匹配语法与permissions和matches所用的匹配模式不同。

⑦   exclude_globs:String数组,可选。用于规定页面匹配的黑名单。同⑥。

3.    incognito:取值为:”spanning”/“split”。指定当浏览器处于隐身模式下时,扩展如何响应。默认为”spanning”。

①   spanning:扩展会运行在共享进程中。标签页的事件和消息会发送给这个进程,来源通过incognito标志区分。

②   split:扩展运行在独立的进程中。每个进程都只能看到自己的事件和消息,各进程间不能通信。

4.    permissions:扩展所需要的权限。permissions是一个String数组,每一个权限都使用String来表示。某些权限在安装前会告知用户。

特别注意permissions中若有不可识别的配置项,那么所有permissions配置项都会失效,即使其他的permissions配置项是正确的

permissions部分常用值如下:

①   模式配匹:用于指定扩展会在哪些URL中生效。例如:

http://*/*:匹配任何http协议的URL。

*://*/*:匹配任何http/https协议的URL。

http://127.0.0.1/*:匹配任何本地请求URL。

https://www.baidu.com/*:匹配https://www.baidu.com/开头的所有URL。

<all_urls>:匹配所有url。

使用模式匹配时,直接将匹配规则字符串添加到permissions即可。

可添加多个匹配规则字符串,匹配效果是这些规则的并集。

若不添加匹配规则字符串,则默认对所有URL生效。

②   background:启用扩展后端环境。即在浏览器运行期始终运行,与单个页面无关。可以在这里调用浏览器的API,通常在这里进行扩展主要逻辑的开发。配合manifest.json的background字段使用。

③   bookmarks:启用书签权限。

④   contextMenus:启用右键菜单权限。可针对不同文档单独定制。

⑤   cookies:启用cookies权限。

⑥   experimental:启用chrome的实验功能API。

⑦   geolocation:允许扩展使用HTML5的地理位置API,无论用户是否有该权限。

⑧   history:启用history权限。

⑨   idle:启用延迟加载。

⑩   management:启用管理权限。用于管理已安装和正在运行的扩展。

⑪   notifications:启用桌面通知权限。不同平台下表现不同,但往往都是一个小弹窗。

⑫   tabs:启用标签权限。用于管理chrome浏览器的标签栏,例如创建,修改,重新排列标签等,以及修改chrome窗体。

实际上,大部分的chrome.tabs.API不需要任何权限就可以使用。tab的url、title和favIconUrl属性必须具有tabs权限才可以使用;tabs.captureVisibleTab必须有<all_urls>或activeTab权限才能使用。

⑬   activeTab:启用活动标签权限。通常来说,tabs更多是用于操作tab标签和窗体属性的。对那些可以与当前web页面交互的API,往往都需要activeTab权限。例如,tabs.executeScript(向页面临时注入js并执行)和tabs.insertCSS(向页面临时注入css并执行),执行浏览器按钮,执行页面按钮,执行右键菜单项,通过命令API执行键盘快捷键等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

chrome扩展:manifest.json文件详解 的相关文章

  • Apache Camel 的 JsonMappingException

    我在骆驼路线上遇到以下异常 Caused by com fasterxml jackson databind JsonMappingException No serializer found for class org apache cam
  • Elm:如何从 JSON API 解码数据

    我有这个数据使用http jsonapi org http jsonapi org format data type prospect id 1 attributes provider user id 1 provider facebook
  • 使用 System.Text.Json 序列化记录成员

    我在记录中使用自我引用成员 如下所示 type Payload Id Guid member x DerivedProperty Derived Property using id x Id NewtonSoft Json会序列化这个 但是
  • 检索 Steam 市场上物品的价格历史记录

    关于 Steam 市场上的物品 我想知道是否有办法检索某物品在一段时间内的价格历史记录 我知道 Steam 为想要将市场特定数据集成到自己网站中的开发人员提供了一个特殊的 api 但我还没有找到任何有关以 json 形式检索商品价格历史记录
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • 如何绕过 CF8 编码不可打印字符中的 SerializeJSON?

    SerializeJSON 创建具有不可打印字符 即 ASCII 21 的 JSON 这是无效的 JSON 我该如何解决这个问题 删除不可打印字符的正则表达式会起作用吗 什么正则表达式会删除不可打印的字符 嗯 这个简单的解决方案是为 cff
  • 如何将 JSON 文本转换为 PHP 关联数组

    我将以下 JSON 对象存储在文本文件 data txt 中 player black time 0 from 2c to 3d 我使用 php 阅读 问题 有没有简单的方法可以转换 data到 PHP 关联数组 我尝试过使用json de
  • 在 Node.js 中创建 JSON 数组

    我需要在用 Node js 编写的服务器中创建一个 JSON 字符串 以便在请求时发送到客户端 问题是这个 JSON 取决于服务器中的可用数据 因此 JSON 数组的大小并不总是相同 我已经尝试了一整天 但尽管我感觉很接近 但我仍然不明白
  • Oracle/PHP - ORA-00911 更新时的无效字符

    我正在运行一个 PHP 脚本 该脚本从 Oracle 数据库实例更新表 首先 我收到一个 JSON 对象 lot KLMHA17N9N00 requestor B10078 id FRESHLOT username B26696 passw
  • Json.dump 失败并显示“必须是 unicode,而不是 str”TypeError

    我有一个 json 文件 其中恰好有大量中文和日文 以及其他语言 字符 我将其加载到我的 python 2 7 脚本中使用io open如下 with io open multiIdName json encoding utf 8 as j
  • Rspec 控制器测试,传递 JSON 参数

    我试图实现以下目标 在 RSpec 控制器测试中创建 POST json 请求 并向其传递参数 这是我的代码 it returns access token do post login email bla password bla1 for
  • Node.js - 异步 JSON 查询

    如果这是一个愚蠢的问题 我深表歉意 但我对 Javascript 很陌生 而 Node js 确实让我很头疼 因为它是异步的 我的目标是从 API 查询 JSON 对象并能够使用它 我试图寻找关于我应该做什么的问题和答案 但它们对我来说都没
  • IIS 上托管的 WCF 服务无法运行

    我想构建一个公开 basicHTTP 端点和 webHTTP 端点的服务 如果我在运行模式下使用 VS2010 测试以下项目 一切都很好 但我想在 IIS 中托管服务 本地或远程 并通过测试 服务 svc 我将我的网站托管到本地 IIS 中
  • 使用 json.js 字符串化多维数组时出现问题

    我有以下问题 stringify 但我认为我的 JavaScript 数组一定是错误的 这是我的代码 var questions new Array Valid hover function for i 0 i lt Questions l
  • 根据内容将 JSON 动态反序列化为派生类型?

    在我作为一个业余项目编写的小库中 我使用 RestSharp 从 Web API 获取 Json 反序列化为模型类对于简单类型来说效果很好 但在某些端点 结果类型在请求时未知 或不清楚 具体来说 它是 GuildWars2 API v1 一
  • jq:根据 group by 计算嵌套对象值

    Json account 1 cost usage low totalcost 2 01 account 2 cost usage low totalcost 2 25 account 1 cost usage low totalcost
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • eventSources 到事件 Json,完整日历

    我正在尝试从 eventSources 获取 json 调用到我的事件 我在 eventSources 中返回的 json 是 title Title Test start 1305841052 当我将此字符串传递到事件中时 它会正确显示日
  • Jackson 反序列化相当于 @JsonUnwrapped 吗?

    假设我有以下课程 public class Parent public int age JsonUnwrapped public Name name 生成 JSON age 18 first Joey last Sixpack 我如何将其反
  • 有序 JSON 对象

    我有一个 servlet 它与数据库通信 然后返回有序 按时间排序 对象的列表 在servlet部分 我有 access DB returns a list of User objects ordered ArrayList users M

随机推荐

  • Spring中bean的作用域与生命周期

    在Spring中 xff0c 那些组成应用程序的主体及由Spring IoC容器所管理的对象 xff0c 被称之为bean 简单地讲 xff0c bean就是由IoC容器初始化 装配及管理的对象 xff0c 除此之外 xff0c bean就
  • 前后端分离架构概述

    1 背景 前后端分离已成为互联网项目开发的业界标准使用方式 xff0c 通过nginx 43 tomcat的方式 xff08 也可以中间加一个nodejs xff09 有效的进行解耦 xff0c 并且前后端分离会为以后的大型分布式架构 弹性
  • 数据库的事务隔离级别总结

    学习数据库的时候常常会接触到事务 ACID等概念 xff0c 那么到底什么是数据库的事务 xff0c 数据库事务又具有哪些特点 xff0c 和ACID有怎样的关系 xff0c 事务的隔离级别又是做什么的呢 xff1f 事务及其四大特性 xf
  • ubuntu18 遇到libc6 版本冲突问题

    问题描述 xff1a You might want to run 39 apt fix broken install 39 to correct these The following packages have unmet depende
  • Linux 系统裁剪--制作一个最小化的Linux iso镜像

    1 前言 一直以来都想制作一个最小化的Linux系统 xff0c 这个小系统需要有常用的Linux 命令 xff0c 以及定制化的某些功能 可是由于种种原因一直没能实现 xff0c 最近终于有时间把它做了出来 本文所说的精简的Linux系统
  • git为单独的仓库设置提交的用户名

    在我们平时的学习中可能有这么一种需求 xff0c 在公司进行开发的时候 xff0c 一般会参与多个项目的开发 xff0c 而项目提交代码时 xff0c 一般请求情况下提供的用户都是同一个 xff0c 而我们为了方便可能会使用全局进行git
  • Ubuntu18.04安装Xfce桌面与VNC远程工具

    1 Xfce桌面的安装 Xfce是一款轻量级的桌面环境 xff0c 运行在类Unix操作系统 xff08 如Linux FreeBSD 和 Solaris xff09 上 xff0c 界面清爽美观且对用户友好 在安装Xfce前需要更新一下系
  • Nginx的临时文件权限问题

    问题 在重启了nginx发现部分较大的Post请求出现了500错误 xff0c 然后 xff0c 查看Nginx错误日志 xff0c 类似如下 xff1a nginx open 34 usr local nginx client body
  • Spring Security中启用CSRF防护(REST版)

    问题 之前文章 Spring Security 43 Spring Session Redis 43 JJWT 介绍了怎么使用Spring Security实现restful风格的登录api 现在 xff0c 我们在这个基础上面实现csrf
  • Android Editable

    简单记一下 xff0c 以前没怎么用过 EditText View的getText直接返回的就是 Editable 而 TextView则是getEditableText才返回 Editable 还有就是注释所说 Replaces the
  • Linux虚拟机断电后开机出现:Entering emeryency mode. Exit the shell to continue.

    在一台服务器上 xff0c 搭建了4个linux虚拟机 可是昨晚不知道怎么的 xff0c 公司断电 今早来的时候发现服务器关机了 然后开机 xff0c 启动虚拟机 xff0c 其中有一台启动不了 xff0c 提示信息如下 xff1a 解决方
  • Web标准和常用浏览器及其内核

    Web标准 Web标准是由W3C组织和其他标准化组织制定的一 系列标准的集合 W3C 万维网联盟 是国际最著名的标准化组织 Web标准的优点 xff1a 1 遵循Web标准除了可以让不同的开发人员写出的页面更标准 更统一 2 让Web的发展
  • java集合集锦_

    java集合集锦 文章目录 java集合集锦一 java集合框架图二 集合简介三 集合遍历四 Arraylist 与 LinkedList 区别 五 ArrayList 与 Vector 区别呢 六 要对集合更新操作时 xff0c Arra
  • java map转为实体类的方法

    一 自己定义方法 span class token keyword public span span class token keyword static span span class token generics function sp
  • oracle 一行转多行

    span class token keyword SELECT span substr span class token punctuation span PBTYPE span class token punctuation span i
  • MiroTik 路由器配置无线中继模式(超细教程)

    关于MikroTik 看一下百度百科中关于MikroTik的介绍吧 MikroTik成立于1995年 xff0c 总部位于拉脱维亚首都里加 xff0c 主要从事开发路由器和无线ISP系统 1997年RouterOS系统 xff0c 2002
  • springmvc项目,启动报错Context initialization failed

    错误描述如下 xff1a springmvc项目 tomcat启动报错 Context initialization failed org span class token punctuation span springframework
  • Spring 总结(学习+面试)

    Spring学习笔记 文章目录 Spring学习笔记1 0 概述1 1使用Spring框架的好处1 2特点 2 0体系结构3 0创建Spring java工程 xff08 eclipse xff09 4 0通过Spring创建对象的方式5
  • tomcat启动,报错Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]

    严重 RMI TCP Connection 3 127 0 0 1 org apache catalina core ContainerBase addChildInternal ContainerBase addChild start o
  • chrome扩展:manifest.json文件详解

    manifest json是扩展的配置文件 xff0c 指明了扩展的各种信息 一个manifest json格式如下 xff1a 必须的字段 3 个 34 name 34 34 MyExtension 34 扩展名称 34 version