十分钟带你入门Chrome插件开发

news2025/2/24 10:31:12

一、简述

我们所说的chrome插件一般都是指chrome扩展程序(Chrome Extension)。chrome插件是一个用Web技术开发、用来增强浏览器功能的软件,它其实就是一个由HTML、CSS、JS、图片等资源组成的一个.crx后缀的文件。chrome插件除了Chrome浏览器之外,还可以运行在所有webkit内核的国产浏览器,比如360极速浏览器、360安全浏览器、搜狗浏览器、QQ浏览器等等。

二、chrome插件的能力

除了支持传统的一切 web API、JavaScript API 以外,chrome插件额外支持以下API(chrome.xxx):

  • bullet 浏览器窗口(chrome.window)
  • tab标签(chrome.tabs)
  • 书签(chrome.bookmark)
  • 历史(chrome.history)
  • 下载(chrome.download)
  • 网络请求(chrome.webRequest)
  • 自定义右键菜单(chrome.contextMenus)
  • 开发者工具扩展(chrome.devtool)
  • 插件管理(chrome.extension)

三、chrome插件的组成

主要由以下部分组成:

  1. manifest.json (配置文件,目前最新是v3版本)
  2. popup (点击插件图标弹出的页面)
  3. content script (插入到目标页面中执行的JS)
  4. background script (在浏览器后台Service Workers中运行的程序)
  5. options (选项页面,可有可无)

四、manifest v3的主要特性

  1. Service Workers取代background pages,使用Service Workers,可对资源进行缓存,从而实现离线访问。
  2. 网络请求调整,新增了一个declarativeNetRequestAPI,允许插件修改及阻断网络请求。
  3. 远程资源访问限制,禁止访问外部的JavaScript及Wasm文件,图片、音视频文件不受影响。
  4. Promises使用,可以愉快地使用promise了,包括async/await。
  5. manifest文件的部分配置和chrome API做了部分调整。

五、基于manifest v3的chrome插件Demo展示





如需获取demo项目源码,请到我的github上自行clone,顺便给咱点个Star,非常感谢。
https://github.com/hepengwei/chrome-extension-basic-demo

六、chrome插件开发本地调试

  1. 调试popup.html页面:右键点击浏览器右上角插件图标,然后选择点击"审查弹出内容"。
  2. 调试background.html或background.js:在浏览器的扩展程序管理页面找到自己加载的扩展程序,然后点击"Service Worker"(MV2则是"背景页")。
  3. 调试content_scripts.js:在注入的页面按F12,和正常页面一样调试。
  4. 调试options.html页面:右键点击浏览器右上角插件图标,然后选择点击"选项",打开插件的选项页,然后按F12,和正常页面一样调试。

七、chrome插件开发注意事项总结

  1. manifest.json必须放在插件项目的根目录,里面包含了插件的各种配置信息,其中也包括了popup、content script、background script等路径。

  2. 不支持使用SVG格式的图片。

  3. 在MV3中,由于Service Workers的机制,background页中不支持使用XMLHttpRequest,建议使用fetch()。

  4. 不允许在html文件中写js代码,只能通过script标签导入js文件的方式,导入文件也不能使用项目外部的文件,比如不能使用CDN上的文件

  5. 不要直接在元素中给onclick属性一个函数调用,例如testB,即使有定义onSave方法,也会报错onSave is not defined,要给元素添加事件要使用JS动态添加,例如$(“#save”).click(onSave)。

  6. 内容脚本和网站想要访问的所有资源都必须在web_accessible_resources属性下声明。

  7. popup可以直接调用background中的JS方法,也可以直接访问background的DOM。

  8. 在对popup页面审查元素的时候popup会被强制打开无法关闭,只有控制台关闭了才可以关闭popup,原因很简单:如果popup关闭了控制台就没用了。

  9. 插件图标在未命中popup的URL匹配规则的页面时没有变灰,这是chrome自身的一个bug(可以关注bug论坛:https://bugs.chromium.org/p/chromium/issues/detail?id=1127067)。

  10. chrome.tabs.connect或chrome.tabs.sendMessage不能用于与选项页面通信,选项页面可以使用chrome.runtime.connect和chrome.runtime.sendMessage与background页通信。

  11. 很多时候你发现你的代码会莫名其妙的失效,找来找去又找不到原因,这时打开background的控制台才发现原来某个地方写错了导致代码没生效,正是由于background报错的隐蔽性(需要主动打开对应的控制台才能看到错误),所以特别注意这点。

  12. 关于content script的注意事项

  • content script文件中可以获取web页面的DOM并修改,content script和原始页面共享DOM,但是不共享JS,JS是相互隔离的,可以通过window.postMessage和window.addEventListener来实现二者消息通讯。
  • 不能访问background或popup中JS定义的变量或方法。
  • 不能访问web页面或其他content script中定义的变量或方法。
  • 不能发送跨域请求。
  • content script文件中只能使用下面列出的API:
    chrome.extension(getURL , inIncognitoContext , lastError , onRequest , sendRequest)
    chrome.i18n
    chrome.runtime(connect , getManifest , getURL , id , onConnect , onMessage , sendMessage)
    chrome.storage

八、国际化配置

在项目根目录下创建名为 “_locales” 的文件夹,在该文件夹中加入如下文件夹及文件

  • _locales/en/messages.json
  • _locales/zh_CN/messages.json

在每种语言的messages.json中添加相同的属性变量,配置如下:

{
    "tooltip": {
       "message": "这里是字段显示的内容"
    }
}

使用时
在manifest.json或CSS文件中通过 __MSG_tooltip__ 引入,

{
    "action": {
        "default_title": "__MSG_tooltip__",
    },
    "default_locale": "zh_CN",
}

在JS文件中通过 const tooltip = chrome.i18n.getMessage(“tooltip”) 引入。

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

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

相关文章

【TFS-CLUB社区 第4期赠书活动】〖Flask Web全栈开发实战〗等你来拿,参与评论,即可有机获得

文章目录❤️‍🔥 赠书活动 - 《Flask Web全栈开发实战》❤️‍🔥 编辑推荐❤️‍🔥 内容提要❤️‍🔥 赠书活动 → 获奖名单❤️‍🔥 赠书活动 - 《Flask Web全栈开发实战》 内容简介: 《Flask Web全栈开发…

flex布局 多种方法让两个盒子分布在左右两边

方法一&#xff1a; 一个父盒子里面包含了两个子盒子的&#xff0c;可以用justify-content:space-between属性 <div classparent> <div class"left"></div> <div class"right"></div> </div> .parent { disp…

FreeRTOS(教程非常详细)

概述&#xff1a; 之前写了关于FreeRTOS的部分内容&#xff0c;为了方便阅读&#xff0c;现在给汇总到一起了。全部学习完后&#xff0c;恭喜你对FreeRTOS有了更深的认知。 第一章 FreeRTOS移植到STM32 第二章 FreeRTOS创建任务 第三章 FreeRTOS任务管理 第四章 FreeRTOS消…

【springcloud 微服务】Spring Cloud Ribbon 负载均衡使用策略详解

目录 一、前言 二、什么是Ribbon 2.1 ribbon简介 2.1.1 ribbon在负载均衡中的角色 2.2 客户端负载均衡 2.3 服务端负载均衡 2.4 常用负载均衡算法 2.4.1 随机算法 2.4.2 轮询算法 2.4.3 加权轮询算法 2.4.4 IP地址hash 2.4.5 最小链接数 三、Ribbon中负载均衡策略…

Unity 实现A* 寻路算法

前言 A* 寻路算法是什么 游戏开发中往往有这样的需求&#xff0c;让玩家控制的角色自动寻路到目标地点&#xff0c;或是让 AI 角色移动到目标位置&#xff0c;实际的情况可能很复杂&#xff0c;比如地图上有无法通过的障碍或者需要付出代价&#xff08;时间或其他资源&#x…

XShell免费版的安装配置教程以及使用教程(超级详细、保姆级)

目录 一、 XShell的作用 二、 下载免费版XShell 三、 安装XShell 四、使用XShell连接Linux服务器 一、 XShell的作用 XShell 是一种流行且简单的网络程序&#xff0c;旨在模拟虚拟终端。XShell可以在Windows界面下来访问远端不同系统下的服务器&#xff0c;从而比较好的达到…

11.落地:微服务架构灰度发布方案

前置知识 1.nacos 服务注册与发现 2.本地负载均衡器算法 3.gateway 网关 4.ThreadLocal 1.什么是灰度发布&#xff1f; 2.什么是灰度策略? 3.灰度发布落地方案有哪些 4.灰度发布架构设计原理 nginxlua&#xff1f; 5.如何基于GateWayNacos构建灰度环境 6.GateWay负载均衡…

【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念&#xff1f; 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 一、Kubern…

java程序员转正述职报告PPT

新公司转正述职报告&#xff0c;花了些时间准备了ppt和讲稿&#xff0c;这里分享一下 述职报告 时间过得很快&#xff0c;转眼就已经三个月了&#xff0c;三个月时间不长&#xff0c;完成的工作也有限&#xff0c;但是在这些工作中&#xff0c;我也学到了很多&#xff0c;现在…

Linux命令大全:2W多字,一次实现Linux自由

前言 大家好&#xff0c;我是40岁老架构师尼恩&#xff0c;Linux 的学习对于一个程序员的重要性是不言而喻的。 学好它却是程序员必备修养之一。 同时&#xff0c;也是很多公司的面试题。 比如说&#xff0c;曾有一个网易的面试题是&#xff1a; 聊聊&#xff1a;你常用的几…

docker入门,这一篇就够了。

Docker入门&#xff0c;这一篇就够了。 Docker容器虚拟化平台。 前言 接触docker很长时间了&#xff0c;但是工作中也没有用到&#xff0c;所以总是学了忘&#xff0c;忘了学。不过这次&#xff0c;我打算跟大家分享一下我的学习历程&#xff0c;也算是我的独特的复习笔记&…

双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python

双目三维重建系统(双目标定立体校正双目测距点云显示)Python 目录 双目三维重建系统(双目标定立体校正双目测距点云显示)Python 1.项目结构 2. Environment 3.双目相机标定和校准 (0) 双目摄像头 (1) 采集标定板的左右视图 (2) 单目相机标定和校准 (3) 双目相机标定和…

毕业论文案例-LDA主题模型实现文本聚类

本文结构框架引言LDA主题模型的预备知识&#xff08;1&#xff09;多项式分布 Multinomial Distribution&#xff08;2&#xff09;狄利克雷分布 Dirichlet Distribution&#xff08;3&#xff09;共轭分布 Conjugate Distribution&#xff08;4&#xff09;吉普斯采样 Gibbs S…

springboot整合webSocket(看完即入门)

webSocket1、什么是webSocket&#xff1f;2、webSocket可以用来做什么?3、webSocket协议4、服务端WebSocket操作类5、客户端1、什么是webSocket&#xff1f; WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单&am…

100天精通Python(可视化篇)——第77天:数据可视化入门基础大全(万字总结+含常用图表动图展示)

文章目录1. 什么是数据可视化&#xff1f;2. 为什么会用数据可视化&#xff1f;3. 数据可视化的好处&#xff1f;4. 如何使用数据可视化&#xff1f;5. Python数据可视化常用工具1&#xff09;Matplotlib绘图2&#xff09;Seaborn绘图3&#xff09;Bokeh绘图6. 常用图表介绍及其…

【Windows】六种正确清理C盘的方法,解决你的红色烦恼

如何正确的清理C盘前言清理方法1. 利用Windows自己附带的磁盘清理工具2. 开启自动清理3. 通过“配置存储感知或立即运行”来清理4. 管理C盘中的程序5. 系统文件夹转移6. 将C盘现有内容转移到别的盘参考链接前言 Windows操作系统一般是安装在磁盘驱动器的C盘中&#xff0c;运行…

D435i相机的标定及VINS-Fusion config文件修改

引言 当我们想使用D435i相机去跑VINS-Fusion时&#xff0c;如果不把标定过的相机信息写入config文件中就运行&#xff0c;这样运动轨迹会抖动十分严重&#xff0c;里程计很容易漂。接下来将介绍如何标定D435i相机&#xff0c;并设置VINS-Fusion的config文件。 一 标定前的准备…

k8s中job与cronjob使用详解

一、前言 job,顾名思义就是任务,job的概念在很多框架中都有,而且实际业务场景中也使用非常广泛,比如大家熟悉的hadoop,客户端可以向集群提交一个job,然后集群根据一定的调度策略来处理这个job; k8s中的job,主要用于批量处理的业务场景,比如像那种短暂的一次性任务(每个…

java 代码样式为什么需要事务,讲述Spring5事务几种方式 认识API

首先 在上一文java Spring5 搭建操作数据库事务环境中 我们搭建了一个事务的业务场景 然后 打开项目 我们继续 先看到数据库表 看好两个人的余额 然后 来到senvice层下的transfAccoSenvice 将里面的 transferAccounts方法 更改如下 //转账方法 public void transferAccounts…

Vue的路由配置(Vue2和Vue3的路由配置)

系列文章目录 Tips&#xff1a;使用Vue3开发项目已经有一段时间了&#xff0c;关于Vue2的路由是如何一步一步搭建的都快要忘记了&#xff0c;今天写着篇文章主要就是回顾一下&#xff0c;在Vue2和Vue3中我们是如何一步一步的配置路由的。 提示&#xff1a;最好的进步就是有闲暇…