开发一个浏览器插件从未如此简单

更新日期: 2022-06-11 阅读: 3k 标签: 浏览器

实际上我们平时说的浏览器插件指的就是浏览器扩展,它可以帮助我们实现非常多强大的能力。以我们最常接触到的 Chrome 扩展 ( Chrome Extension ) 为例,它可以帮助我们实现请求的抓取和劫持、各种事件监听、浏览器窗口控制、更改网页内容等等。


实际上啊,浏览器扩展用到的技术非常简单,就是 Web 技术,只需要几个简单的 htmlcss、JS 文件,以及浏览器规定的扩展文件就可以运行起来,不过下面几个问题可能让我们开发起来有些阻碍:

「技术栈」

想要更好的维护一个大型的项目,我们肯定要引入 reactvue、TypeScript、webpack 等现代的开发方式,目前各浏览器的扩展没有比较成熟的脚手架工具

「部署发布」

发布过程比较麻烦,如果你的插件想要尽可能多的在不同环境生效,你需要把开发好的程序进行适配,并且手动发布到不同的浏览器(如 Chrome、Firefox、Edge )扩展商店。


Plasmo

不过,最近我在 Github 上发现了一个专门为开发一个浏览器扩展提供的框架: Plasmo 。

https://github.com/PlasmoHQ/plasmo

刚刚开源不久,就获得了 2.4k star,看来大家对这方面的痛点还是很大的。

Plasmo 的官方是这样描述它的:就像浏览器扩展的 Next.js !


开发

框架默认支持了 React + Typescript 技术栈,你可以基本告别自己用 create-react-app 去搭了。。

我们可以用下面的命令直接创建一个工程:

npm x plasmo init

初始化出来的工程非常简洁清晰:


popup.tsx 是一个默认导出的 React 组件,也就是我们点击插件时的弹出框; assets 会存放一些我们插件中必备的图标;其他的都是项目的基本配置。

另外,在官方文档( https://docs.plasmo.com/quickstarts )中给出了和下面一些不同技术栈的搭配开发的能力:

  • Next.js
  • Stripe
  • Redux
  • Tailwind CSS
  • Google Analytics
  • Supabase Authentication
  • Firebase Authentication

你可以根据你自己的需要进行搭配,也可参考官方的实示例存储库: https://github.com/PlasmoHQ/examples


调试

调试的话也非常简单,你只需要前往 chrome://extensions 并启用开发人员模式,然后在项目中执行 npm dev ,然后点击 Load Unpacked 并导航到扩展程序的 build/chrome-mv3-dev 就可以了。


这时你会发现你的浏览器扩展拥有热更新的能力!真的很 nice 。


发布

Plasmo 框架附带一个方便的 GitHub 操作,称为 Browser Platform Publish 或 BPP 。这个功能可以自动将你的扩展发布到所有受支持的浏览器扩展市场。

  • Browser Market Submit
  • Mozilla Webstore Upload
  • Chrome Webstore Upload
  • Edge Webstore Upload

你只需要在项目里创建一个 keys.json 文件,然后将不同浏览器的配置填入文件就可以了,真的非常简单:

{
"$schema": "https://raw.githubusercontent.com/plasmo-corp/bpp/v2/keys.schema.json",
"chrome": {
"clientId": "xxx",
"refreshToken": "xxx",
"extId": "xxx"
},
"edge": {
"clientId": "ConardLi",
"clientSecret": "code秘密花园",
"productId": "xxx",
"accessTokenUrl": "https://login.xxx/oauth2/v2.0/token"
}
}

为了安全起见,密钥注意不要直接提交到 Github 上,最好和 Github 的 Encrypted secrets 配合使用~

好了,就是这么简单,基于这个框架去开发一个浏览器扩展,我们只需要去关注业务的核心逻辑,其他的环境、配置、部署、发布, Plasmo 可以通通帮我们搞定。

作者:ConardLi ,来源:code秘密花园

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/11707

相关推荐

浏览器禁用了javascript,各种浏览器如何开启javascript的方法总汇

您的浏览器禁用了JS脚本运行,请启用该功能。怎么解除浏览器禁用js?这篇文章将总结整理各个浏览器如何开启、禁用javascript的方法总汇。

监听浏览器刷新及关闭

为保证‘高度安全性’,用户每次退出页面或浏览器都要清除登陆信息,每次进入系统都要重新登陆(每次登陆还要手机验证码等乱七八糟的验证信息,,,求用户的心里阴影面积),但是刷新页面不可以清除登陆信息。

Js实现阻止浏览器返回的功能

无论pc端还是移动端,浏览器都会带有后退按钮或后退键.主要方便我们能返回以前访问过的页面,但有时候我们不得不关闭这个功能.尤其是对于一些推广落地页,用户进入后不希望它返回

window.open被拦截的解决方法总汇

介绍window.open方法被浏览器拦截的处理方式。在 Chrome 的安全机制里,非用户直接触发的 window.open 方法,是会被拦截的,这是由于浏览器为了维护用户安全和体验,下面采用几种变通方法解决:表单提交的方式、onclick事件、延迟打开等

Chrome浏览器crx格式插件安装教程

谷歌浏览器在旧版本(大概是v67版本)之前安装crx插件都非常简单,直接将crx拖放到浏览器内就可以安装了。但是之后的新版本(目前已经升级到v80版本)就只允许用户通过谷歌应用商店安装插件

如何将网站设置为浏览器首页

提示:按 Ctrl + D 即可添加网址到浏览器收藏夹中,方便下次访问fly63导航。下面是如何设置首页的方法。Google Chrome浏览器设为首页的方法;Firefox火狐浏览器设为首页的方法

完美解决安卓端百度浏览器屏蔽fixed悬浮元素的问题

h5活动页面底部有个悬浮图片按钮,使用fixed悬浮定位在底部,但是在安卓端的百度浏览器下打开,却发现该图片一闪而过,在百度浏览器中消失不见。

Fiddler无法正常抓取谷歌等浏览器的请求_解决方案

fiddler会自动给浏览器设置一个代理127.0.0.1端口8888,并且记忆浏览器的代理设置,所有的请求先走fiddler代理,再走浏览器代理。解决方案:关闭SwitchyOmega代理,或者使用其代理中的系统代理选项。即可解决问题。

js判断浏览器内核是否是safari浏览器

PC端只有Chrome有Safari字段吗?为什么不需要判断其他浏览器?其实360,QQ等浏览器的userAgent字段也会带有Safari字段,但是由于他们基于Chrome二次开发的,所有也会携带有Chrome字段。

Vue单页面应用阻止浏览器记住密码

现象1:路由切换时再次提示是否记住密码,解决办法:这其实是个代码bug,在登录页面,用form把输入框都包起来就行了。现象2:autocomplete=off无效

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!