【浏览器插件】Chrome扩展V3版本

news2024/11/25 6:34:50

前言: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版。

{
action(Manifest V3 及以上)
author
background
browser_action(仅 Manifest V2)
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
host_permissions(Manifest V3 及以上)
icons
incognito
manifest_version
name
offline_enabled
omnibox
optional_permissions
options_page
options_ui
page_action(仅 Chrome 中的 Manifest V2)
permissions
protocol_handlers
short_name
sidebar_action
storage
theme
theme_experiment
user_scripts(仅 Manifest V2)
version
version_name
web_accessible_resources
}

{
  //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版本后台是叫背景页,上面配置里面添加的js文件都会在背景页里面引入加载进去,v2版本背景页中是可以调用window对象和document对象的(即可以引用jQuery.js之后使用$.ajax去发送请求)

v3版本后台是叫service worker 服务者,上面配置里面只能添加一个js文件,如果还需要引用其它js则只能在那个js文件里面用vue的import引入方式把其它文件引入加载,v3版本的service worker服务者中无法调用window和document对象(即无法引用jQuery.js,也就无法使用$.ajax发送请求了,因为jQuery是基于原生写的,里面有需要用到document对象),且原生的XMLHttpRequest请求也无法使用,以及vue的axios也是,想要调用请求需要用fetch()去进行请求

消息监听 

  // content_script.js
  chrome.runtime.sendMessage({target: element, action: 'getJobInfo'},
      function(response) {
        console.log('收到后台发过来的职位信息',response);
      }
  );
  // background.js
  chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
    if (msg.action=== 'getJobInfo') {
      sendResponse({answer:`收到${msg.action}消息,马上传给你`,data:{}});
    }
  });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gitee拉取项目,提交代码

1,安装git 2,gitee配置成员仓库权限 3,克隆项目 git clone gitgitee.com:sky474775788/Python_API_AUTO.git 4,配置用户信息 git config --global user.name 林俊xxx git config --global user.email ohnxxxsee1xxx.com 5&…

机器学习·L2W4-决策树

决策树 从根节点的所有示例开始计算所有可能特征的分割信息增益,并选择信息增益最高的特征根据所选特征分割数据集,并创建树的左分支和右分支不断重复分割过程,直到满足停止条件 信息增益 也可以理解为信息熵的减少 p p p是结果为positive…

住宅代理和数据中心代理:指纹浏览器用哪个更安全?

在当今的数字时代,确保您的在线安全至关重要。这就是住宅和数据中心代理发挥作用的地方,它们可以保护您的身份和个人信息。指纹浏览器解决了账号所在环境指纹参数隔离的安全问题,而IP解决环境的定位与隔离问题,就像Maskfog中提供的…

洛伦兹微分方程与混沌理论

前言 这一段时间在看书中关于深度学习与神经网络的内容,其中有一节介绍神经网络用于预测洛伦兹微分方程的数值解,还提到了“吸引子”这一概念,当时也没太理解是什么,下午搜集了一本书上关于混沌理论的介绍——《混沌的本质》。 这…

【线性回归】——解决运筹优化类问题

目录 文章目录 前言 一、模型原理 1.线性规划模型的三要素 😏😏😏 2.模型特点 3.线性规划的表现形式 二、模型建立步骤 1.找决策变量 2.确定目标函数 3.找到约束条件 4.运用Matlab中的Linprog函数 总结 前言 在实际生活应用中,我…

Unity入门5——材质

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

etcd高可用集群部署

文章目录 一、环境准备二、安装部署2.1 下载安装包2.2 将etcd和etcdctl复制到/usr/local/bin中2.3 创建目录并赋予权限2.4 修改节点配置2.4.1 配置etcd.conf文件2.4.2 配置/etc/systemd/system/etcd.service文件 2.5 启动ectd服务2.6 查看集群成员信息2.7 查看集群状态 在生产环…

【PyQt5】PyQt5 信号和槽

基于GUI的应用程序是事件驱动的。函数或方法按照用户的操作(例如点击按钮、从集合中选择项目或点击鼠标等)来执行,这些操作被称为 事件 。用于构建GUI界面的小部件充当这些事件的来源。每个PyQt小部件都是从QObject类派生而来,设计…

《Redis设计与实现》读书笔记-复制

目录 1.概述 2.复制命令 3.部分重同步过程 4.部分重同步实现 4.1复制偏移量 4.2复制积压缓冲区 4.3服务器运行ID 5.总结 1.概述 在redis 通过向从服务器发送命令:SLAVE OF,让从服务器复制主服务器,成为复制。 复制的目的 让从服务器…

等保测评 linux设置三权分立

1、首先浅谈一下目录结构 drwxr-xr-x意思如下:第一位表示文件类型。 d是目录文件,l是链接文件,-是普通文件,p是管道。后面的分三个三个来看,即 rwx 、r-x 、r-x。 第一个: root :r 是可读&#…

在Linux中认识pthread库

int *pnullptr; pnullptr; *pnullptr; 指针变量做右值也是变量拥有空间。去承装数据。 *p代表指针所指向的空间,及0号地址,及往虚拟地址的0号地址处写8个字节的数据,全部写为0. (此操作不允许) 进程和线程的关系如…

Python PDF文本处理技巧 - 查找和高亮文字

目录 使用工具 Python在PDF中查找和高亮文字并统计出现次数和页码 Python在PDF的特定页面区域中查找和高亮文字 Python使用正则表达式在PDF中查找和高亮文字 Python在PDF中查找文字并获取它的坐标位置 其他查找条件设置 在日常工作和学习中,我们常常需要处理各…

命令-响应框架在 ESP RainMaker 中的应用

【如果您之前有关注乐鑫的博客和新闻,那么应该对 ESP RainMaker 及其各项功能有所了解。如果不曾关注,建议先查看相关信息,知晓本文背景。】 在 ESP RainMaker 中,管理员用户可以查看一些基本的节点数据,包括类型、型…

【Liunx】线程与进程的经典面试题总结

在这个浮躁的时代 只有自律的人才能脱颖而出 -- 《觉醒年代》 线程与进程的面试题总结 1 简述什么是LWP2 简述LWP与pthread_create创建的线程之间的关系3 简述轻量级进程ID与进程ID之间的区别4 请简述什么是线程互斥,为什么需要互斥5 简述你了解的进程间通信方式…

【免费测试】人脸身份证比对接口如何用Java对接?(二)

一、什么是人脸身份证比对? 人脸身份证比对又称人证比对,实人比对,人像比对,输入姓名、身份证号码和头像照片,与公安库身份证头像进行权威比对,返回分值作为判断依据。 二、人脸身份证比对接口适用哪些场…

安科瑞智慧能源管理平台在电动汽车虚拟电厂优化调度起到什么作用?

摘要:大量电动汽车用户的无序充电可能造成电网负荷剧烈波动,危及电网的安全稳定。随着电动汽车入网技术的应用,将电动汽车充电站及其周边的分布式新能源发电聚合为虚拟电厂后进行优化调度,有助于改善电动汽车用户充放电的经济性及…

深入LVS内核世界:揭秘其高效背后的技术细节与实现机制

LVS简介 Linux virtual server,即Linux虚拟服务器,是一种基于Linux平台的高性能、高可用的服务器负载均衡技术。它主要工作在网络层、传输层(OSI参考模型的第三层、第四层),主要通过IP地址和端口号来转发网络流量。LV…

【Dash】Web 应用程序中的可复用组件

一、Reuable Comopnents By writing our makup in Python, we can create complex reusable components like tables without switching contexts or languages. from dash import Dash, html import pandas as pddf pd.read_csv(https://raw.githubusercontent.com/GarciaS…

程序包javax.annotation不存在

1、问题 程序包javax.annotation不存在2、原因 JDK1.8升级到17后,由于Java EE已经变更为Jakarta EE,包名以 javax 开头的需要改为 jakarta 3、解决 import javax.annotation.Resource; 替换成 import jakarta.annotation.Resource; 问题解决。 …

基于STM32开发的智能灌溉系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 农业灌溉园艺灌溉常见问题及解决方案 常见问题解决方案结论 1. 引言 智能灌溉系统通过监测土壤湿度和环境条件,自动控制水泵和阀门,实现…