96SEO 2026-08-05 12:24 2
作为一名前端开发者,我一直想写一个浏览器插件来调整我的工作流。但每次打开官方文档,看到下面内容时热情总会冷却一半:

在开始之前。先说说 Plasmo 打动我的几个主要特性:
@plasmo/storage 让跨上下文的数据共享变得异常简单。
pnpm create plasmo # OR yarn create plasmo # OR npm create plasmo
按照提示输入项目名称,选择模板。
初始化后目录结构非常清晰,符合前端直觉:
my-extension/
├── assets/ # 静态资源
├── popup.tsx # 插件点击图标后的弹窗页面
├── background.ts # 后台服务脚本
├── contents.ts # 内容脚本
├── package.json
└── tsconfig.json
亮点:Plasmo 采用基于文件的路由程序
popup.tsxcontents.tsbackground.tsmanual manifest.json 中,无需手动配置 "action"/"content_scripts"
pnpm dev
Plasmo 会自动打开一个 Chrome 窗口并加载未打包的 此后每次保存代码都会自动刷新 ——对 Content Script 的调试尤为友好。其实,
build/chrome-mv3-dev 文件夹。
import { useState,useEffect } from "react"
import "../style/index.css"
function IndexPopup {
const = useState
const = useState
const = useState
// 恢复上一次保存的主题色
useEffect => {
setMounted
// TODO: 从 @plasmo/storage 加载持久化颜色
},)
const handleRefresh = async => {
const = await chrome.tabs.query
if return
chrome.tabs.reload
if ) {
try {
const url = new URL
chrome.browsingData.remove(
{ origins: },{ cache: true,cacheStorage: true,cookies: true,localStorage: true }
)
} catch {}
}
window.close
}
const handleReplaceIcon = async => {
const = await chrome.tabs.query
if {
chrome.tabs.sendMessage(tab.id,{
从action来看,"replace-floating-icon",iconUrl。})
}
}
const handleThemeChange = async => {
setThemeColor
const = await chrome.tabs.query
if {
chrome.tabs.sendMessage
}
document.documentElement.style.setProperty
}
const openShortcuts = => {
chrome.tabs.create
}
if return
return (
="" 页面辅助助手="">
{/* 深度刷新按钮 */}
{/* 主題颜色选择 */}
主题切换
{.map => (
handleThemeChange}
/>
))}
handleThemeChange} title="自定义颜色" />
{/* 悬浮图标替换 */}
悬浮图标替换
setIconUrl}
className="url-input"
/>
{/* 快捷键说明 */}
键盘快捷键:{" "}
{`Ctrl+Shift+R `}
{" "}
{" "}
{/* 实际快捷键展示 */}{" "}
Ctlrl + Shift + R {" "}
{" "}
{/*/}
{
}
请注意以上示例仅展示关键逻辑。
实际项目建议拆分为多个可复用组件,并使用 @plasmo/storage 持久化配置信息。
⚡️ 小技巧
- 将 UI 样式抽离到 src/style/*.css 并在 popup.tsx 中 import;- 使用 usePlasmoStorage Hook 实现跨脚本同步;- 利用 Vite 插件 vite-plugin-react-swc 加速编译。
. 开发内容脚本 – 用于页面交互和悬浮按钮渲染:
tsx
/** * Content Script * 此脚本运行在目标网页上下文中,用于注入 UI 与监听消息 */ export {};// 注入悬浮按钮
const createFloatingButton = => {
const btn = document.createElement;btn.id = "page-helper-floating-btn";
---省略---
. 后台脚本 – 管理快捷键和全局逻辑:
tsx
chrome.commands.onCommand.addListener => {
if executeDeepRefresh;}),不过,
chrome.runtime.onMessage.addListener => {
if executeDeepRefresh;}),
const executeDeepRefresh = async => {...};export {},
. 权限管理 – 在 `package.json` 中声明即可,无需手动编辑 manifest:
json
{
"manifest": {
"host_permissions":,"permissions":。"commands": {
"deep-refresh": {
"suggested_key": {"default":"Ctrl+Shift+R","mac":"Command+Shift+R"},"description":"深度刷新当前页面并清除缓存"
}
}
}
}
Plasmo 会在建立时自动合并至最终 manifest.json。
建立与发布"
bash
pnpm build
生成文件位于 build/chrome-mv3-prod可直接在 Chrome
管理页拖拽加载。
bash
pnpm package
bash
pnpm build --target=firefox-mv2 # Firefox
pnpm build --target=safari-mv3 # Safari
这样一次代码即可产出四大主流浏览器兼容包。
踩坑记录与思考"
-
版本迭代快 :Plasmo 正处于快速迭代期,偶尔会出现 Breaking Changes。建议锁定 `
` 并在升级前阅读 Changelog。话说回来,/li>
-
Safari 调试困难 :虽然支持打包。但 Safari
机制与 Chromium 差异较大,需要 macOS 与 XCode 才能真机调试。/li>
总体评价:对% 前端工程师Plasmo 带来的 研发效率提高 完全抵消了体积上的轻微增加。它把「写组件」的体验搬进了浏览器
世界,让你不再为繁琐配置而烦恼。话说回来,
"
浏览器插件是前端技术落地的最佳舞台。它让可以直接触达使用者并解决真实痛点。而 **Plasmo** 的出现彻底抹平了基础设施门槛,让「写代码」成为唯一必做的事。
如果你一直想写一个插件却迟迟未动。现在就尝试:
pnpm create plasmo
相信当你第一次看到代码改动即刻反映在浏览器中的那一刻,你大概率会感谢自己的决定。Your plugin inspiration?话说回来,Share it in comments!
标签:
浏览器插件
-
上一篇:
Tomcat如何处理请求?
-
下一篇:
React组件间如何实现高效通信?
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback