告别重复输入:我开发了一款 Chrome 效率扩展

插件截图

在日常工作中,我们经常需要重复输入相同的文本:常用的代码片段、邮件回复模板、或者是标准的客户沟通术语。虽然市面上有很多剪贴板工具,但专门针对浏览器环境深度优化的轻量级扩展却并不多见。

今天,我想介绍一下我开发的 Chrome 扩展 —— **Text Snippets Extension (文字快捷输入助手)**。

✨ 为什么开发这个工具?

核心痛点只有一个:效率

在浏览器中工作时,频繁切换窗口去复制粘贴会打断心流。我需要一个能”住在”浏览器里的助手,它应该:

  1. 触手可及:按快捷键就能呼出。
  2. 不打扰:用完即走,不遮挡视线。
  3. 足够智能:能应对各种复杂的输入框(包括那些不管用的 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
2
3
4
5
// content.js 中的注入逻辑
const shadowRoot = container.attachShadow({ mode: 'open' });
const style = document.createElement('style');
style.textContent = css;
shadowRoot.appendChild(style);

顽固的焦点问题

在开发过程中,最让人头疼的是点击侧边栏时,网页原本的输入框会失去焦点,导致文字无法插入。
为了解决这个问题,我实现了一套双重保障机制

  1. 事件拦截:在侧边栏的 mousedown 事件中使用 preventDefault(),防止焦点转移(针对非 iframe 元素)。
  2. 主动追踪:通过 focusinclick 事件全局监听并记录最后活跃的可编辑元素(Last Focused Element),一旦直接插入失败,立即尝试回退到记录的元素。

📥 获取与体验

目前项目已开源,欢迎大家下载体验或贡献代码。

希望这个小工具能提升你的工作效率!如果有任何建议,欢迎在评论区或 GitHub Issue 中提出。