用 React 开发了一款 Chrome 插件【七牛云图床】

sxkk20082年前知识分享178

前言

习惯使用 markdown 写作的朋友,肯定会有自己的图床,七牛云的对象存储对于个人用户每月免费 10GB,可谓是白嫖的上上之选,只需要注册后,绑定一个域名就可以使用了。

我之前使用的是一款开源的软件 PicGo,它使用的时候 Electron+vue 开发,支持七牛图床、腾讯云 COS、阿里云 OSS、GitHub 等,可谓是非常方便。

我们知道使用了 Electron 相当于打包了一个 chromium,因此安装包会比较大,今天我打算使用浏览器扩展来完成同样的功能。

效果演示

支持手动上传和剪切板上传,并且自动复制到剪切板

上传后,可以查看历史记录,点击复制 url。

由于发布的 chrome 应用市场需要 5 美元,因此只提供的源码的安装方式,感兴趣的朋友可以安装试试。

chrome 插件介绍

chrome 插件相当于一个静态网页,但远比静态网页功能强大,chrome 插件通常由以下几部分组成:

  • manifest.json:相当于插件的 meta 信息,包含插件的名称、版本号、图标、脚本文件名称等,这个文件是每个插件都必须提供的,其他几部分都是可选的。
  • background script:可以调用全部的 chrome 插件 API,实现跨域请求、网页截屏、弹出 chrome 通知消息等功能。相当于在一个隐藏的浏览器页面内默默运行。 功能页面:包括点击插件图标弹出的页面(简称 popup)、插件的配置页面(简称 options)。
  • content script:是插件注入到页面的脚本。content script 可以操作 DOM,但是它和页面其他的脚本是隔离的,访问不到其他脚本定义的变量、函数等,相当于运行在单独的沙盒里。content script 可以调用有限的 chrome 插件 API,通知到 background script ,实现网络请求。

配置这些参数很麻烦? 我们可以使用一个框架帮我们自动搞定。

Plasmo 框架

我选用的是 Plasmo。

Plasmo 框架是一个开源的浏览器扩展 SDK,支持所有主流的浏览器,构建你的插件,无需担心配置文件编写和构建浏览器扩展时的奇怪特性,plasmo 帮助我们屏蔽了底层的差异。

  • 支持 React + Typescript
  • 声明式开发,自动生成 manifest.json (MV3)
  • 热加载

初始化项目

使用下面的命令初始化项目:

pnpm dlx plasmo init
# 或者使用 npm v7
npm x plasmo init

上面的命令会创建一个最简单的 plasmo 浏览器插件项目,结构很简单。

  • popup.tsx 该文件为默认的弹窗窗口入口文件。这就是你在插件弹出窗口上所需的全部内容!
  • assets Plasmo 会自动生成一些小的图标并将它们从 icon512.png 文件中配置到清单中
  • package.json 处理管理依赖包,也可以管理插件的 manifest 信息
  • tsconfig.json TypeScript 配置文件

要开发插件,执行

pnpm dev

会在 build/chrome-mv3-dev目录下构建出开发中的插件代码,将这个文件夹拖入到 chrome://extensions/ 就可以查看效果了。

然后将扩展程序固定到 Chrome 工具栏可以更方便访问。

要打包插件,执行

pnpm build

会在 build/chrome-mv3-build目录下, 构建出压缩后的插件代码,安装与上面的方式相同。

存在问题

上传图片主要使用到的是 qiniu-js,这个是七牛云官方的 js-sdk,大家去看文档就可以了。

由于七牛云上传 js-sdk 需要使用到 token,而 token 是在服务端生成的,但我们的实现的是一个 chrome 插件,也就是没有服务端, 若在纯客户端实现,需要使用到 crypto-js,一个加密的 JavaScript 标准库。

运行 build 会在根目录下,生成.plasmo文件夹,为真实的入口文件。

可以看出 plasmo 是使用 parcel 来打包的。现在运行 npm run build,会在命令行中提示以下错误。

也没提示那个文件打包错误。

经过测试后发现,因为项目中包含 crypto-js,而 crypto-js 的加载方式是 umd,目前还没解决,这就是 plasmo 的劣势吧,其实我们可以使用 webpack 来配置实现,只不过需要手动维护 manifest.json 的相关信息。

以上就是本文全部内容,如果对你有帮助,可以随手点个赞,这对我真的很重要,希望这篇文章对大家有所帮助,也可以参考我往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

相关文章

234百科

234百科

山东半岛及东北地区有强降雨 “苏拉”明日转向西北方向移动...

AI人工智能平台:改变未来的创新引擎

AI人工智能平台:改变未来的创新引擎

  随着科技的不断进步,人工智能(AI)已经逐渐渗透到我们的生活和工作中。作为一种能够模拟人类智能的技术,人工智能在各个领域展现出了强大的潜力。近年来,AI人工智能平台作为这...

经过一晚上的配置和折腾,花钱不说,虽然可以实现在 iPad 上编程的需求,但体验远却比不上 PC,今天我就来推荐一种新的方式,让你的 iPad 变成真正的生产力工具。

Cloud Studio 简介

Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装,随时随地打开浏览器就能使用。

Cloud Studio iPad 编程 以上是我用 iPad 浏览器,在 1 分钟内初始化了一个 next 初始化模板,可以说速度比本地开发还快,当我在左侧修改代码时,右侧预览界面便会同步热更新。

Cloud Studio 安装 react snippts

Cloud Studio 可以说是提供了一台云服务器,并且把 VSCode 搬到了线上,我们可以同本地开发一样,在上面安装插件,比如可以在左侧扩展中搜索 react,安装这个 react snippts 扩展,便可以帮助我们提供常用代码片段,快速创建组件。

iPad 编程生产力

前言iPad 有个口号,就是“买前生产力,买后爱奇艺”,使用 iPad,配合 Procreate 来作画体验还可以, 如果你想让你的 iPad 可以编程,你却不得不为之花费时间和精力,我搜了网上的教程...

生活黑科技让你的生活更舒适便捷,无需等待和烦恼

生活黑科技让你的生活更舒适便捷,无需等待和烦恼

  1. 智能家居控制系统  随着5G技术的普及,智能家居控制系统正日渐流行。通过智能连接,我们可以使用手机控制室内温度、照明、电视等各种家居设备,即使我们不再家也能灵活掌控...

基于AI技术的家居智能化解决方案——改善生活质量的新时代

基于AI技术的家居智能化解决方案——改善生活质量的新时代

  智能家居已经成为现代社会家庭生活的热门话题。随着人工智能技术的不断发展和应用,越来越多的家居设备开始拥有自主学习和智能化操作的能力。AI家居应用正成为改善生活质量和提供便...

使用 React hooks 监听系统的暗黑模式

前言苹果的“暗黑模式”带来了全然一新的外观,它能使您的眼睛放松,并有助于您专心工作。暗黑模式使用一种较深的配色方案,这种配色作用于整个系统,现在大部分网站也加入了暗黑模式,包括 Tailwindcss...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。