【浏览器插件】Chrome扩展V3版本
前言:Chrome从2022年6月开始,新发布插件只接受V3版。2024年V2版已从应用商店下架。
浏览器扩展插件开发API文档
chrome官网(要翻墙): https://developer.chrome.com/docs/extensions/mv3
MDN中文:https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json
MDN英文:https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json
搜狗扩展开发文档:API制定规范简介 - 《搜狗浏览器开发者文档》 - 书栈网 · BookStack
chrome扩展开发中文教程(manifest v2): chrome谷歌浏览器开发文档
360浏览器扩展开发教程(manifest v2): 开发文档
参考文章(感谢作者)
V2版天花板:【干货】Chrome插件(扩展)开发全攻略-好记的博客
V2-小茗同学: https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html
记录Chrome插件从V2版本升级到V3版本的过程中遇到的问题_background.scripts' requires manifest version of 2-CSDN博客
chrome扩展(插件) V3版本使用_chrome插件v3中文手册-CSDN博客
Chrome 浏览器插件 Manifest.json V3 中权限(Permissions)字段解析_chrome插件permissions-CSDN博客
V3 版本 Manifest.json 文件全字段解析: https://zhuanlan.zhihu.com/p/678368901
两万+字数:从0到1带你开发 Chrome 浏览器 Manifest V3 版本插件-CSDN博客
Chrome扩展-相关API操作
- 侧边栏:chrome.devtools API
- 操作项:chrome.action API
- 菜单项:chrome.contextMenus API
- 显示桌面通知:chrome.notifications API
- 管理历史记录:chrome.history API
- 本地存储:chrome.storage API
- 控制标签页和窗口:chrome.tabs、chrome.tabGroups 和 chrome.windows 等 API
- 键盘快捷键:chrome.commands API
- 身份认证:chrome.identity API
- 管理插件:chrome.management API
- 提供建议:chrome.omnibox API
- 更新 Chrome 设置:chrome.proxy API
- 下载管理:chrome.downloads API
- 书签:chrome.bookmarks API
- 请求网络:chrome.webRequest API
Chrome扩展 控制网络
可以通过注入脚本、拦截网络请求以及使用 Web API
与网页进行交互,来控制和修改 Web
:
- 注入
JS
和CSS
文件 - 访问当前
Tab
页 - 控制
Web
请求 - 录音和屏幕截图
- 修改网站设置
manifest.json
manifest_version:从Chrome 18开始,开发者应该指定版本号为2;从2022年6月开始,新发布插件只接受V3版。
一图看懂manifest.json结构(v3中browser action和page action已合并为action)
manifest.json的所有参数
// manifest.json里面的所有参数
// https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json
{
author
backgroundbrowser_action(仅 Manifest V2)
page_action(仅 Chrome 中的 Manifest V2)
action(Manifest V3 及以上-v2中的browser_action和page_action合并的)
user_scripts(仅 Manifest V2)
permissions(V2中是ChromeAPI权限和主机权限,V3只是ChromeAPI权限)
host_permissions(主机权限:Manifest V3 及以上)browser_specific_settings
chrome_settings_overrides
chrome_url_overrides
commands
content_scripts
content_security_policy
declarative_net_request
default_locale
description
developer
devtools_page
dictionaries
externally_connectable
homepage_url
icons
incognito
manifest_version
name
offline_enabled
omnibox
optional_permissions
options_page
options_ui
protocol_handlers
short_name
sidebar_action
storage
theme
theme_experiment
version
version_name
web_accessible_resources
}
manifest.json的常用参数
//manifest.json的常用参数
{//chrome插件的版本"manifest_version": 3,//插件名称"name": "chrome浏览器扩展_名称",//插件版本号"version": "1.0.0",//插件描述"description": "一个简单的浏览器插件",//默认语言(如果当前浏览器设置的语言不存在多语言配置文件,则默认中文),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": "assets/img/rw_logo_16.png","32": "assets/img/rw_logo_32.png","48": "assets/img/rw_logo_48.png","128": "assets/img/rw_logo_128.png"},//背景页,后台脚本引入,v2是scripts:[xxx,xxx],可以引入多个js文件,// v3是service_worker:'xxx',只能引入一个js,其他js文件可以在当前引入的js文件里面import引入// 扩展程序管理界面的插件的那个“背景页”也将变成“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": "js/background.js",// 插件的后台脚本的类型,可以是 module 或者 script"type": "module" },//注入脚本,值是个数组对象,可以有多个对象"content_scripts": [//每个对象代表一个注入的配置{//需要在指定页面注入的js脚本文件"js": ["js/content-script/jquery.min.js","js/content-script/content.js"],//需要注入js脚本文件的指定页面"matches": ["*://*.example.net/*","*://*.example.com/*","*://*.lagou.com/*"],//不允许注入js脚本文件的指定页面"exclude_matches": ["https://*.xxx.com/*"],//什么时候注入的js脚本,document_start=页面加载开始时,document_end=页面加载结束时"run_at": "document_start"}],//v2配置权限,在v2中的权限配置中,ChromeAPI权限和主机权限是一起配置的。v3是分开的//ChromeAPI权限:需要使用Chrome的一些API的话需要配置对应的API权限,否则会报错未添加权限而无法使用,如tags标签页,contextMenus添加自定义右键菜单项)// https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions"permissions": ["cookies", // 允许插件访问浏览器的 cookie"contextMenus", // 自定义创建右键菜单API"tabs", // 允许插件访问浏览器的 tab选项卡API"storage", // 允许插件访问浏览器的 缓存API"webRequest", // 监听浏览器请求API...],// 主机权限:主机权限也可以称为请求白名单权限,在背景页backgroud.js里面或者popup页面调用某个网站请求时,增加该网站的白名单权限,如果没添加的则调用请求会报跨域)"host_permissions": ["https://*.example.net/*","https://*.example.com/*"],// 在浏览器插件图片上,右键会出现该插件名称,点击插件名称跳转的页面"homepage_url": "https://www.example.com",//动作API,原文:在 Manifest V2 中,有两种不同的 API 来实现操作: `"browser_action"` 和 `"page_action"` . 这些 API 在引入时扮演了不同的角色,但随着时间的推移它们变得多余,因此在 Manifest V3 中,我们将它们统一为单个 `"action"` API; //v3配置,在v3中需要把browser_action废弃了,需要改成action,同时插件图标的点击监听事件也是一样,把chrome.browserAction改成chrome.action//如果不添加action这个配置参数的话,chrome.action.onClicked.addListener()这个监听方法会无效"action": {"default_icon": { // 默认图标的文件路径"16": "assets/img/rw_logo_16.png","32": "assets/img/rw_logo_32.png","48": "assets/img/rw_logo_48.png","128": "assets/img/rw_logo_128.png"}"default_title": "插件标题", // 默认是插件名称"default_popup": "html/popup.html", // 弹出窗口的 HTML 文件路径}//通过网络访问的资源,对象中分了可外部访问的资源以及允许哪些外部网站可以访问该资源"web_accessible_resources": [{//允许访问的资源路径,数组传多个参数"resources": ["assets/img/logo.png","assets/img/big.png",],//允许访问资源的网站域名"matches": ["https://*.example.net/*","https://*.example.com/*"]}]
}
v2升为v3后的注意点
v2升级为v3后,background的区别:
v2版本后台是叫background 背景页,配置background:['*.js','*.js','*.js'...]里面的js文件都会在背景页里面引入加载进去,v2版本背景页中是可以调用window对象和document对象的(即可以引用jQuery.js之后使用$.ajax去发送请求)。
v3版本后台是叫service_worker 服务者,配置"service_worker": "background.js"只能添加一个js文件,如果还需要引用其它js则只能在那个js文件里面用vue的import引入方式把其它文件引入加载,v3版本的service_worker 服务者中无法调用window和document对象(即无法引用jQuery.js,也就无法使用$.ajax发送请求了,因为jQuery是基于原生写的,里面有需要用到document对象),且原生的XMLHttpRequest请求也无法使用,以及vue的axios也是,想要调用请求需要用fetch()去进行请求。
v3版本里面的content_script.js 还是可以调用window、document、location对象的
消息监听
// content_script.js// 向 service_worker 发送消息chrome.runtime.sendMessage({action: 'getJobInfo',message:'需要职位信息',jobId:'1'},function(response) {console.log('收到后台发过来的职位信息',response);});// background.js// 在 service_worker 中接收消息chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {if (msg.action=== 'getJobInfo') {//可根据msg.jobId调用后端接口获取职位信息,返回到contentsendResponse({answer:`收到${msg.action}消息,马上传给你`,data:{……}});}});
相关文章:

【浏览器插件】Chrome扩展V3版本
前言:Chrome从2022年6月开始,新发布插件只接受V3版。2024年V2版已从应用商店下架。 浏览器扩展插件开发API文档 chrome官网(要翻墙): https://developer.chrome.com/docs/extensions/mv3 MDN中文:https:/…...

编码器信号干扰问题、编码器选型
系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、屏蔽技术1.静电屏蔽:2.低频磁屏蔽:3.电磁屏蔽:4.减少“天线” 二、增量编码器的信号选择三、信号电缆选择四、…...

Unity入门5——材质
创建材质 点击Assets → Create → Material,得到一个默认材质球的副本。 使用材质 直接把材质球拖拽到物体上,或设置mesh renderer组件下的Materials 数组中第一个元素...

C的温故而知新:存储类别、链接和内存管理(C Primer Plus第十二章)
存储类别、链接和内存管理 这一章主要涉及到的是一些偏概念的东西,基本上偏向于自己去理解这部分内容。很好地理解这一章可以更好地控制程序,合理的利用内存存储数据。 C语言提供了多种不同的模型或存储类别在内存中存储数据。作用域有块作用域、函数作…...

SpringBoot统一功能处理——统一数据返回格式
目录 一、简单使用 二、存在的问题描述 三、优点 一、简单使用 统一的数据返回格式使用 ControllerAdvice 和 ResponseBodyAdvice 的方式实现 ControllerAdvice 表示控制器通知类。 添加类 ResponseAdvice , 实现 ResponseBodyAdvice 接口,并在类上添加 …...
Milvus 实践(2) --- 2.4.x 安装,脚本分析,数据存储解析
目录 背景 Milvus2.4.x安装脚本分析 etcd组件 container_name image 参数 注意问题 environment volumes 实体化 command 参数 注意事项 healthcheck 参数 作用 下载 minio组件 container_name image 参数 注意事项 environment 参数 ports 参数 注…...
【蛋疼c++】千万别用std::wifstream读取Unicode UTF16文件
上当了。 最近程序要和 Jscript / activex 脚本通信。 ActiveX这玩意,导出文件,如果是UTF8导出,会出现莫名异常:写一半直接退出。或许是系统语言设置的问题。 但是切换为utf16(unicode)导出就没有问题&a…...

[算法] 第二集 二叉树中的深度搜索
深度优先遍历(DFS,全称为 Depth First Traversal),是我们树或者图这样的数据结构中常⽤的 ⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分支,直到⼀条路径上的所有节点都被遍历 完毕,然后再回溯到上…...
放弃使用外键时,sequelize 应该怎么使用?
在使用 Sequelize 时,如果想放弃使用外键,但仍然希望在模型之间建立关联,可以通过设置 constraints 选项为 false 来实现。这允许你定义模型之间的关系,而不在数据库中创建外键约束。以下是具体的实现步骤: 定义没有外…...
Microsoft GraphRAG 输出的配置信息
Microsoft GraphRAG 输出的配置信息 {"llm": {"api_key": "REDACTED, length 9","type": "oci_genai_chat","model": "cohere.command-r-plus","max_tokens": 4000,"temperature"…...

怎么判断张量的维度(形状(shape)),即如何定义行数、列数和深度的?
举一个三维张量吧 # 3行4列深度为2 const3 tf.constant([[[1,2],[3,4],[5,6],[7,8]],[[11, 12], [13, 14], [15, 16], [17, 18]],[[21, 22], [23, 24], [25, 26], [27, 28]] ],tf.float16) shape (3,4,2)--借鉴博主奶油松果的图和代码 分析形状 (3, 4, 2) 最外层的括号&…...

AI入门指南(二):算法、训练、模型、大模型是什么?
文章目录 一、前言二、算法是什么?概念实际应用 三、训练是什么?概念实际应用 四、模型是什么?概念实际应用小结 五、大模型是什么?概念大模型和小模型有什么区别?大模型分类实际应用 六、总结七、参考资料 一、前言 …...
CSS已访问链接的隐私保护
摘抄自:《CSS权威指南 第四版》 有超过十年的时间,已访问的链接可以使用任何可用的CSS属性装饰,与未访问链接没有差别。 然而,大约在2005年,有几个人通过示例揭露,通过视觉样式和简单的DOM脚本就可以判断用…...

代码练习12-排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 归并排序算法核心步骤 归并排序核心步骤如下: 把长度为n的要排序的序列,分成两个长度为n/2的子序列;对这两个子序列,分别采用归并排序;…...

Linux 内核源码分析---套接字
套接字通信 ISO 设计一种参考模型,定义组成网络的各个层,该模型由7层组成,称为OSI(开放 系统互连)模型如下: 应用层:网络服务与最终用户的接口; 表示层:数据的表示、安…...

vscode配置xdebug断点调试详细教程
注:环境为本地windows开发环境,编辑器为vscode,PHP集成环境工具为EServer vscode安装扩展并配置 安装PHP Debug 扩展中搜索 PHP Debug 并安装: 配置PHP Debug 1、点击扩展设置 2、在设置中,点击 setting.json 3、编…...

【人工智能】Transformers之Pipeline(八):文生图/图生图(text-to-image/image-to-image)
目录 一、引言 二、文生图/图生图(text-to-image/image-to-image) 2.1 文生图 2.2 图生图 2.3 技术原理 2.3.1 Diffusion扩散模型原理 2.3.2 Stable Diffusion扩散模型原理 2.4 文生图实战 2.4.1 SDXL 1.0 2.4.2 SD 2.0 2.5 模型排名 三、总…...

AI Agent 工程师认证-学习笔记(1)——【单Agent】ModelScope-Agent
学习链接: 【单Agent】ModelScope-Agent学习指南https://datawhaler.feishu.cn/wiki/GhOLwvAPkiSWmokjUgqc1eGonDf 手把手Agent开发开源教程(觉得不错的话可以star一下)https://github.com/datawhalechina/agent-tutorial 动手学Agent应用…...
【Python机器学习】树回归——将CART算法用于回归
要对数据的复杂关系建模,可以借用树结构来帮助切分数据,如何实现数据的切分?怎样才能知道是否已经充分切分?这些问题的答案取决于叶节点的建模方式。回归树假设叶节点是常数值,这种策略认为数据中的复杂关系可以用树结…...

前端(HTML + CSS)小兔鲜儿项目(仿)
前言 这是一个简单的商城网站,代码部分为HTML CSS 和少量JS代码 项目总览 一、头部区域 头部的 购物车 和 手机 用的是 文字图标,所以效果可以和文字一样 购物车右上角用的是绝对定位 logo用的是 h1 标签,用来提高网站搜索排名 二、banne…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...