【SSD系列】五分钟,不,三分钟,实现一个颜色拾取器chrome插件

前言

在 之前 不知道,但是可能超有用的 Web API 提到了 EyeDropper 拾色器,并提到 基于此做个取色插件,是不是分分钟就搞定呢?

答案就是: 分分钟搞定。

此外,欢迎关注 前端SSD系列 专栏。

一些有意思的前端内容,旨在3-10分钟里,有所获,又不为所累。

插件效果

直接先看效果。不仅仅可以取色浏览器本身,浏览器外也不在话下。

动手, 三分钟足以。

选择项目模板

选择一个合适的模板,比如

本文就以 chrome-extension-boilerplate-react-vite 为基础开发。

打开项目,主要需要改动的地方就是pages和配置 manifest.js, 既然说到这里了,就得简单了解一下这些pages下文件夹 和 chrome插件功能的对应关系

名字 功能/作用范围
background 后台 偷偷 运行的代码
content 打开满足条件标签页 页面的可运行的代码
devtools 打开开发者工具后的对应的tab
panel 打开开发者工具后的对应的tab下的内容
newtab 打开标签页
options 插件的配置
popup 点击插件后的弹框
sidepanel 侧边栏

每个块都还比较容易理解,今天的插件涉及的是 popup部分,简单介绍一下

popup 点击 标注1 对应的插件图标后, 标注2 就是 popup的区域。

sidepanel

这算是比较新的一个能力了,简单介绍一下。 点击如下图的标注 1, 在标注2处可以选择相应的功能。 真个红色区域就是 side panel。

实现

更改 src\pages\popup\Popup.tsx 代码如下:

ts 复制代码
import '@pages/popup/Popup.css';
import withErrorBoundary from '@src/shared/hoc/withErrorBoundary';
import withSuspense from '@src/shared/hoc/withSuspense';
import { useState } from 'react';

const Popup = () => {
  const [backgroundColor, setBackgroundColor] = useState('');

  const onToPickColor = () => {
    if (!('EyeDropper' in window)) {
      alert("你的浏览器不支持 EyeDropper API");
      return;
    }
    // @ts-ignore
    const eyeDropper = new EyeDropper();
    const abortController = new AbortController();

    eyeDropper
      .open({ signal: abortController.signal })
      .then((result) => {
        setBackgroundColor(result.sRGBHex);
      })
      .catch((err: Error) => {
        alert(`发生错误:${err && err.message || '未知错误'}`)
      });
  }

  return (
    <div className='App'>
      <button className="start-button" onClick={onToPickColor}>打开拾色器</button>
      <div>
        颜色是:<span id="result">{backgroundColor}</span>
      </div>
      <div className='color-rect' style={{
        backgroundColor
      }}></div>
    </div>
  );
};

export default withErrorBoundary(withSuspense(Popup, <div> Loading ... </div>), <div> Error Occur </div>);

本地部署

  1. pnpm install
  2. npm run build
  3. chrome 浏览器输入 chrome://extensions/
  4. 加载已加压的扩展正序,选择项目里面的 dist 目录

小结

是不是很简单,一切都看起来没那么难,三分钟是不是都多了。

写在最后

不忘初衷,有所得,而不为所累,如果你觉得不错,你的一赞一评就是我前行的最大动力。

微信公众号:成长的程序世界 ,关注之后,海量电子书,打包拿走不送。

或者添加我的微信 dirge-cloud,一起学习。

引用

chrome-extensions-samples

相关推荐
奶丝兔蜜柚3 分钟前
栈溢出优化
javascript
南半球与北海道#8 分钟前
前端引入vue-super-flow流程图插件
前端·vue.js·流程图
然我15 分钟前
React 16.8:不止 Hooks 那么简单,这才是真正的划时代更新 🚀
前端·react.js·前端框架
小高00728 分钟前
📈前端图片压缩实战:体积直降 80%,LCP 提升 2 倍
前端·javascript·面试
OEC小胖胖31 分钟前
【React Hooks】封装的艺术:如何编写高质量的 React 自-定义 Hooks
前端·react.js·前端框架·web
BillKu39 分钟前
vue3+element-plus 输入框el-input设置背景颜色和字体颜色,样式效果等同于不可编辑的效果
前端·javascript·vue.js
惊悚的毛毛虫44 分钟前
掘金免广告?不想看理财交流圈?不想看exp+8?
前端
springfe01011 小时前
vue3组件 - 大文件上传
前端·vue.js
再学一点就睡1 小时前
Vite 工作原理(简易版)—— 从代码看核心逻辑
前端·vite
NeilNiu1 小时前
开源AI工具Midscene.js
javascript·人工智能·开源