从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的配置过程很重要,后续有时间会慢慢完善、扩展该插件,让其更丰富一些。如果本文对你有帮助,麻烦点赞支持,非常感谢。

相关推荐
baiduopenmap几秒前
百度世界2024精选公开课:基于地图智能体的导航出行AI应用创新实践
前端·人工智能·百度地图
小牛itbull12 分钟前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
请叫我欧皇i20 分钟前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript
533_23 分钟前
[vue] 深拷贝 lodash cloneDeep
前端·javascript·vue.js
guokanglun29 分钟前
空间数据存储格式GeoJSON
前端
GIS瞧葩菜32 分钟前
局部修改3dtiles子模型的位置。
开发语言·javascript·ecmascript
zhang-zan1 小时前
nodejs操作selenium-webdriver
前端·javascript·selenium
ZBY520311 小时前
【Vue】 npm install amap-js-api-loader指南
javascript·vue.js·npm
猫爪笔记1 小时前
前端:HTML (学习笔记)【2】
前端·笔记·学习·html
brief of gali1 小时前
记录一个奇怪的前端布局现象
前端