在日常工作中,我们经常需要重复输入相同的文本:常用的代码片段、邮件回复模板、或者是标准的客户沟通术语。虽然市面上有很多剪贴板工具,但专门针对浏览器环境深度优化的轻量级扩展却并不多见。
今天,我想介绍一下我开发的 Chrome 扩展 —— **Text Snippets Extension (文字快捷输入助手)**。
✨ 为什么开发这个工具?
核心痛点只有一个:效率。
在浏览器中工作时,频繁切换窗口去复制粘贴会打断心流。我需要一个能”住在”浏览器里的助手,它应该:
- 触手可及:按快捷键就能呼出。
- 不打扰:用完即走,不遮挡视线。
- 足够智能:能应对各种复杂的输入框(包括那些不管用的 iframe 编辑器)。
🚀 核心功能
1. 极简的侧边栏设计
按 Ctrl+Shift+S (Mac 上是 Cmd+Shift+S) 即可唤出侧边栏。界面采用现代化的 Material Design 风格,支持深色模式,与 Chrome 原生体验完美融合。
2. 智能焦点管理(技术亮点)
这是开发过程中最具挑战性也是最自豪的部分。不同于普通的粘贴板工具,Text Snippets 解决了浏览器中各种奇葩的输入场景:
- 普通输入框:最基础的支持。
- 富文本编辑器:支持 ckEditor, TinyMCE, KindEditor 等常见编辑器。
- Iframe 嵌套:即使编辑器被包裹在多层 iframe 中,插件也能精准定位焦点。
- 复杂组件:支持如 Tag Editor 这种由多个 DOM 元素伪装成的输入框。
3. 数据安全与同步
- 本地存储:所有数据存储在本地 Chrome Storage 中,安全可靠。
- 导入导出:支持 JSON 格式的一键导入导出,方便在不同设备间迁移数据。
🛠️ 技术实现细节
作为一个开源项目,这里也简单分享一下背后的技术实现:
Shadow DOM 样式隔离
为了避免扩展的 CSS 污染宿主页面,或者被宿主页面的 CSS 影响,在这个项目中,我全面使用了 Shadow DOM 技术。侧边栏的所有 UI 都封装在一个独立的 Shadow Root 中,确保了界面在任何网页下表现一致。
1 | // content.js 中的注入逻辑 |
顽固的焦点问题
在开发过程中,最让人头疼的是点击侧边栏时,网页原本的输入框会失去焦点,导致文字无法插入。
为了解决这个问题,我实现了一套双重保障机制:
- 事件拦截:在侧边栏的
mousedown事件中使用preventDefault(),防止焦点转移(针对非 iframe 元素)。 - 主动追踪:通过
focusin和click事件全局监听并记录最后活跃的可编辑元素(Last Focused Element),一旦直接插入失败,立即尝试回退到记录的元素。
📥 获取与体验
目前项目已开源,欢迎大家下载体验或贡献代码。
- GitHub: Text Snippets Chrome Extension
- 安装方式: 下载源码 -> Chrome 扩展程序 -> 加载已解压的扩展程序
希望这个小工具能提升你的工作效率!如果有任何建议,欢迎在评论区或 GitHub Issue 中提出。