这是「30分钟搞定」栏目第二篇。
上篇我们做了个读书笔记网页,从零搭到能跑。今天步子大一点——做一个能装进浏览器的Chrome插件。
干什么用:你在网上看到一篇好文章、一段有用的话、一个想存的页面,点一下插件的按钮,内容就存下来了。不用复制粘贴、不用新建文档、不用截图。
30分钟,从零到插件装好。打开WorkBuddy,走。
先看一眼成品
做完之后大概这样:
Chrome右上角有一个小图标,点开弹出一个小窗口
窗口里一个按钮「保存当前页面」
点一下,把当前网页的标题、链接、选中的文字存下来
存好的内容在弹出窗口里显示成一张张小卡片
可以搜索、可以删除
数据存在浏览器里,关掉重开也不丢

第1步:搭插件骨架(5分钟)
Chrome插件就是一组文件放在一个文件夹里——manifest.json配置文件、html页面、js脚本。WorkBuddy能帮你全部搭好。
打开WorkBuddy,发这段话:
帮我创建一个Chrome浏览器插件项目。
要求:
包含一个manifest.json(Manifest V3),权限包含storage、activeTab、scripting 包含一个popup.html作为点击图标弹出的小窗口 包含popup.js处理弹出窗口的逻辑 包含一个content.js用来读取当前网页的内容 popup.html里面要有这些元素:
一个「保存当前页面」按钮 一个搜索框 一个列表区域,用来展示已保存的页面 风格:简洁、白底、移动端风格,宽350px 帮我把所有文件创建在一个叫chrome-save-plugin的文件夹里。
等它生成完,你会看到一个文件夹,里面四个文件。这是插件的基础骨架。(其他文件说明:.py的2个文件上workbuddy用来生成文件的;README.md是项目说明文件;test-page.html是一个测试网页;icons是图标文件)

第2步:实现保存功能(5分钟)
骨架有了,但保存按钮还没实际功能。接着发:
实现保存功能:
当用户点击「保存当前页面」按钮时,通过content.js获取当前页面的标题(document.title)、URL(window.location.href),以及用户选中的文字(window.getSelection().toString())
把获取到的内容保存到chrome.storage.local。数据格式:每条记录包含 title、url、text、time(保存时间)
content.js通过chrome.runtime.sendMessage把数据传给popup.js,popup.js负责存储
popup.js收到数据后存进storage,然后刷新列表显示
这里面几个关键动作:注入content script读页面内容 → 发消息给popup → popup存数据。第一次可能不完全对,没关系,看下面。
第3步:让列表和按钮真正联动(5分钟)
上面那步通常要做两次——第一次大概率只是「按钮能点了」,但数据没存进去或列表没更新。接着调试:
检查一下:
popup.html里的按钮有没有绑定点击事件 content.js是否通过chrome.scripting.executeScript正确注入到当前页面 popup.js里的消息监听chrome.runtime.onMessage是否写对了 保存成功后列表有没有重新从storage读取并渲染 帮我修复所有问题。
这一步完成后,你应该能:打开任意网页 → 选中一段文字 → 点插件按钮 → 点「保存当前页面」 → 列表里出现刚才的内容。

第4步:加搜索和删除(5分钟)
能存了,现在让管理方便一点:
加两个功能:
搜索:搜索框输入关键字,实时筛选已保存的列表。匹配标题和正文内容,不区分大小写 删除:每张卡片右侧加一个删除按钮(一个小×),点击删除对应记录。删除后更新storage和列表 额外优化:列表为空时显示一句提示「还没有保存的内容,去网页上选一段文字试试~」
第5步:装到Chrome里(5分钟)
文件都写好了。现在把它装进浏览器:
打开Chrome,地址栏输入chrome://extensions
右上角打开「开发者模式」
点「加载未打包的扩展程序」
选你的chrome-save-plugin文件夹
右上角会出现插件图标

点一下图钉把图标固定到工具栏(见下方截图)。然后随便打开一个网页,选中一段文字,点插件图标,点保存。
成了。

第6步:润色一下(5分钟)
插件能跑了,现在让界面好看一点:
优化popup的样式:
整体背景用浅灰(#f5f5f5),卡片用白色,带圆角8px和轻微阴影 标题字号大一点,用深灰色 URL显示截断,超过一行用省略号 标签用小徽章形式显示来源域名(提取URL的域名部分) 搜索框圆角、浅灰边框,聚焦时边框变蓝 整体字体用系统默认无衬线字体

最终效果图。
另外需要注意,在修改插件后可能报错,需要在插件管理页面重载,如果重载还是不行就删除插件了重新加载未打包的扩展程序。
你刚刚做了什么
回顾一下,大概六七段对话,你做出了一个Chrome插件。而且不是你想象中那种「Hello World」的演示版——是真的能用、能存、能搜、能删的完整工具。
这个插件现在是你的了。以后网上看到任何想存的内容,选中文字,点一下,永久保存。
拆开来看,这个项目涉及了:Chrome Extension API、消息通信、本地存储、DOM操作、事件监听。如果按传统路子走,先学JavaScript基础再学Chrome API,没有一两周下不来。
你用了30分钟。还是老规矩——每一行代码都跟你提的需求一一对应。
还可以加什么
如果玩上瘾了,试试这些:
导出功能:加一个「导出全部」按钮,把所有保存的内容导出成Markdown文件
标签分类:保存的时候加一个标签输入框,按标签筛选
一键复制:每张卡片加一个复制按钮,点一下内容进剪贴板
同步到云端:用chrome.storage.sync替换local,登录Chrome后数据多设备同步
右键菜单:加右键菜单「保存到我的收藏夹」,不用点插件图标也能保存
每个需求一句话,WorkBuddy帮你改。
这是我的,你的呢?
这期跟上次一样——我做出来的版本跟你做的,大概率不一样。你可能改了配色、加了功能、调整了布局。

本期封面由ChatGPT生成
把你的插件截图发到后台。我挑几个下期读者秀里展示出来。
如果这篇帮到了你,转发给一个想学编程但不知道从哪开始的朋友。
关注大叔,每天动手30分钟,一个月你也能用AI写出自己的应用。
夜雨聆风