浏览器插件开发【从入门到放弃之二:浏览器插件开发企业级实践】

1.引言

想要开发一个企业级的浏览器插件,如果可爱的工程师们单凭谷歌官方的开发文档,往往很难满足实际的开发要求。比如我们想采用react、antd、状态管理、代码热加载等。如果自己从零去实现,不仅会让项目的开发周期变得很长,还容易搞出一堆bug。而且等你搞出来的时候,老板都带着设计师美眉跑路了!!!

这里,我推荐一个国外比较热门的插件开发解决方案,老外们的维护频率也比较高:Plasmo,我也是基于这个脚手架给公司上架过一款ChatGPT-AI产品。

2.Plasmo教程

2.1Plasmo介绍

The Plasmo(opens in a new tab) Framework is a battery-packed browser extension SDK made by hackers for hackers. Build your product and stop worrying about config files and the odd peculiarities of building browser extensions.

蹩脚翻译:Plasmo框架是由黑客为可爱的程序员们准备的浏览器扩展SDK,让程序员不再担心去配置项目的配置文件(manifest.json)和构建浏览器扩展的奇怪特性。

2.2开发要求

  • Node.js 16.14.x or later
  • MacOS or Windows or Linux
  • pnpm (Strongly Recommended)

2.3起步

arduino 复制代码
// 创建一个基础项目
pnpm create plasmo
pnpm dev
pnpm build

项目结构如下:

这里我们主要关注

1 .assets文件夹,是放置静态资源的文件,唯一不同的是,我们应该在这里放一个icon.png图片,脚手架能帮我们自动生成不同尺寸并且符合谷歌要求的icon。

2 .popup.tsx就是我们查看的popup弹窗,它本质一个React组件,框架底层会自动帮我们转换。

3 .package.json这个文件和普通的json文件有点区别,这里不仅仅能写项目的基础信息和作为插件包管理文件,主要是浏览器插件的manifest.json也是写在里面,长这样:

2.4如何添加各类扩展页

1.添加popup页面

javascript 复制代码
// 根目录下添加一个popup.tsx文件
import { useState } from "react"
function IndexPopup() {
  const [data, setData] = useState("")
  return (
    <div
      style={{
        padding: 16
      }}>
      <h2>
        Welcome to your{" "}
        <a href="https://www.plasmo.com" target="_blank">
          Plasmo
        </a>{" "}
        Extension!
      </h2>
      <input onChange={(e) => setData(e.target.value)} value={data} />
      <a href="https://docs.plasmo.com" target="_blank">
        View Docs
      </a>
    </div>
  )
}
export default IndexPopup

2.添加options页面,options页面用来写一些插件的配置信息或者设置信息等

javascript 复制代码
// 根目录下创建一个options.tsx文件
import { useState } from "react"
function OptionsIndex() {
  const [data, setData] = useState("")
  return (
    <div>
      <h1>
        Welcome to your <a href="https://www.plasmo.com">Plasmo</a> Extension!
      </h1>
      <h2>This is the Option UI page!</h2>
      <input onChange={(e) => setData(e.target.value)} value={data} />
    </div>
  )
}
export default OptionsIndex

3.添加new tabs页面,具体表现形式如下图

javascript 复制代码
//根目录下创建newtab.tsx
import { useState } from "react"
function IndexNewtab() {
  const [data, setData] = useState("")
  return (
    <div
      style={{
        display: "flex",
        flexDirection: "column",
        padding: 16
      }}>
      <h1>
        Welcome to your <a href="https://www.plasmo.com">Plasmo</a> Extension!
      </h1>
      <input onChange={(e) => setData(e.target.value)} value={data} />
    </div>
  )
}
export default IndexNewtab

本次更新就到这啦,更多知识需要小伙伴们自己去研究了。由于博主平时比较忙,几乎很少上掘金,如在开发中有遇到无法解决的问题,可以加入我的WEB前端QQ交流群:1032595904

相关推荐
Frag0ut2 天前
Chrome 浏览器安全指南:常见风险、隐私设置与防护建议
chrome·浏览器·隐私保护·安全防护·账号安全·安全设置·扩展权限
Frag0ut4 天前
Chrome四大版本获取及共存指南:Stable/Beta/Dev/Canary
前端·chrome·浏览器·dev·beta·canary·共存版
Frag0ut4 天前
新兴浏览器内核能和 Chrome 有一战之力吗?Servo、Ladybird、WebKit 与 Gecko 的技术格局分析
chrome·浏览器·webkit·blink·gecko·servo·ladybird
Helix2505 天前
Chrome 快捷键效率提升:10 个常用快捷键,把浏览速度提升一个量级
chrome·google·浏览器·使用技巧·效率工具·快捷键·爆红教程
Frag0ut5 天前
2027 年浏览器展望:Chrome 与 Edge 的 AI 智能体进化方向
前端·人工智能·chrome·edge·浏览器·新功能
竹林8187 天前
OmniGame 技术白皮书:从零依赖到 WebRTC P2P,重新定义网页小游戏的工程上限
前端·浏览器
Frag0ut8 天前
除了谷歌服务,Chrome和其他Chromium浏览器有什么与众不同?
chrome·edge·浏览器·chromium·隐私保护·brave·ungoogled
被摘下的星星8 天前
浏览器为什么“遇到标签才请求资源”?
浏览器·资源请求
树脂8 天前
http缓存与浏览器缓存
浏览器
坚定信念,勇往无前8 天前
浏览器插件技术-wxt
浏览器