从0到1入门开发我的第一个浏览器插件

前言

先贴一下edge浏览器扩展插件地址:摸鱼办-edge浏览器插件

首先说一下为什么不是 Chrome 插件,因为发布它是需要收费的!!!所以选择使用edge发布插件。

我相信作为一个开发者你肯定使用过浏览器插件,因为它可以扩展浏览器的功能,可以让我们更方便、更有效率的摸鱼,啊呸!是高效工作!

常见的浏览器插件如:json格式化、广告终结者、划词翻译等等;安装了这些插件用起来是非常方便的,但是你有没有想过它是如何实现的呢?

其实很简单,浏览器插件通常是使用 JavaScriptHTMLCSS开发的,最终打包成一个 .crx 后缀的压缩包。这对于我们前端而言简直没有学习成本可言,前端三件套可是最最基本的技能了。

既然开发成本几乎为0,已经迫不及待的想自己尝试一下了。但是开发一个啥插件好呢?

仔细想了想,我每天其实看电脑最多的就是浏览器和编辑器了,那我可以实现一个浏览器插件以面板的形式每天提醒我下班时间。这样是不是比自己到下班点去看时间更醒目一些呢?虽然之前已经实现了云函数定时任务微信推送下班提醒消息: 从github定时任务到云函数的实践 - 掘金 (juejin.cn)

但这是第一次实现浏览器插件,可以先开发一个简单的小插件练练手;于是纠结了很久后最终决定就叫它:摸鱼办

需求拆分

有了目标后就好办了,想了想需求罗列一下,然后就可以动手用代码去实现了,先列了下面几个功能点:

  • 每天下班时间倒计时
  • 周五放假时间倒计时
  • 上班不同格言的展示
  • 右键快捷导航

由于我个人这几个需求都是很简单的,很好实现,所以就不一一贴代码了,下面主要记录一下插件工程的结构、主要字段、调试、错误、发布等问题

扩展插件源码结构

manifest.json

这个json文件可以理解为这个工程的配置文件,它是必须存在的!

js 复制代码
{
  "name": "xxx",  // 插件名称
  "description": "Build an Extension!", // 插件描述
  "version": "0.3", // 版本
  "manifest_version": 3, // 指定插件版本,这个很重要,指定什么版本就用什么样的api,不能用错了
  "background": {
    "service_worker": "background.js" // 指定background脚本的路径
  },
  "action": {
    "default_popup": "popup.html", // 指定popup的路径
    "default_icon": {  // 指定popup的图标,不同尺寸
      "16": "/images/get_started16.png",
      "32": "/images/get_started32.png",
      "48": "/images/get_started48.png",
      "128": "/images/get_started128.png"
    }
  },
  "icons": { // 指定插件的图标,不同尺寸
    "16": "/images/get_started16.png",
    "32": "/images/get_started32.png",
    "48": "/images/get_started48.png",
    "128": "/images/get_started128.png"
  },
  "permissions": [],// 指定应该在脚本中注入那些变量方法
  "content_scripts": [ // 指定content脚本配置
    {
      "js": [ "content.js"], // content脚本路径
      "css":[ "content.css" ],// content的css
      "matches": ["<all_urls>"] // 对匹配到的tab起作用。all_urls就是全部都起作用
    }
  ]
}

下面是几个重要的字段:

background

在插件刚安装的时候,也会执行一个脚本叫做 background 脚本,这个脚本也是一个独立的环境,之后没有特殊情况下不会重新执行,是整个插件当中执行频率最低的一个脚本。在chromeV2以及之前的版本中background有自己的视图页面,但是在v3版本中,废弃了这一设计,只有一个脚本来代替,跑在插件的后台。

content_scripts

其实就是浏览器插件中向页面注入脚本的一种形式(虽然名为script,其实还可以包括css),借助content-scripts我们可以实现通过配置的方式轻松向指定页面注入JS和CSS,比如我这里就引入了 jquery。

插件调试

在浏览器地址栏中直接输入: edge://extensions/ 打开扩展页面

  • 打开 开发人员模式

  • 点击加载解压缩的扩展,直接选择你本地插件源码即可加载

当插件加载成功后,会出现:详细信息、删除、重新加载按钮等

本地修改代码后,需要点击重新加载然后刷新浏览器页面查看效果。

插件不执行情况

当刷新页面发现插件不执行没效果时,查看扩展页面,发现有错误按钮,点击错误查看具体报错信息,来解决问题

Manifest V2 和 V3写法区别

参考资料: 前端 - Chrome 浏览器插件从 Manifest V2 升级到 V3 版本所需要修改的点 - 日升_rs - SegmentFault 思否

网上大部分资料都是基于v2版本的写法,现在有v3版本,所以在编写源码时需要注意一下对应版本的写法,否则会报错。

插件发布

源码编写好后,打包为.zip包,直接上传到微软的合作伙伴中心。

首先需要注册为微软开发者,不得不吐槽一下这个网址,加载是特别特别特别的慢啊! 需要耐心多尝试几次才能加载完成。

合作伙伴中心 (microsoft.com)

还有就是微软这个插件发布审核时间太久了!!! 需要7个工作日。

发布遇到错误

  • 上传程序包时必须使用 v3版本

修改 manifest.json配置文件下的 manifest_version字段为: 3 后,重新打包,上传成功

最终效果

总结

参考了一些网上的资料,也踩了一些坑,最终实现了这个插件。需求很简单,源码也很简单,主要是从0到1的配置过程很重要,后续有时间会慢慢完善、扩展该插件,让其更丰富一些。如果本文对你有帮助,麻烦点赞支持,非常感谢。

相关推荐
酒尘&2 小时前
JS数组不止Array!索引集合类全面解析
开发语言·前端·javascript·学习·js
学历真的很重要2 小时前
VsCode+Roo Code+Gemini 2.5 Pro+Gemini Balance AI辅助编程环境搭建(理论上通过多个Api Key负载均衡达到无限免费Gemini 2.5 Pro)
前端·人工智能·vscode·后端·语言模型·负载均衡·ai编程
用户47949283569153 小时前
"讲讲原型链" —— 面试官最爱问的 JavaScript 基础
前端·javascript·面试
用户47949283569153 小时前
2025 年 TC39 都在忙什么?Import Bytes、Iterator Chunking 来了
前端·javascript·面试
大怪v4 小时前
【Virtual World 04】我们的目标,无限宇宙!!
前端·javascript·代码规范
狂炫冰美式4 小时前
不谈技术,搞点文化 🧀 —— 从复活一句明代残诗破局产品迭代
前端·人工智能·后端
xw55 小时前
npm几个实用命令
前端·npm
!win !5 小时前
npm几个实用命令
前端·npm
代码狂想家5 小时前
使用openEuler从零构建用户管理系统Web应用平台
前端
dorisrv7 小时前
优雅的React表单状态管理
前端