写作陪伴插件:编辑增量检测、声音反馈与隐私边界
本文目录
本文依据个人浏览器插件默认分支中编辑监听 hook、触发词匹配器、音频管理器和自动模式组件做静态源码审阅。它不是通用网页“发呆检测器”:目前能确认的路径是读取宿主编辑器提供的文本快照,在编辑事件后比较前后文本,并对新增匹配项触发鼓励反馈。本文不披露项目标识、内部依赖或服务地址,也不复制原始词库。
从文本快照找新增内容
监听 hook 在启用时先从宿主桥接层取得当前编辑文本,再启动编辑观察;后续事件到达时,将新旧文本交给匹配器。匹配器把文本和关键词做大小写归一化,统计每个关键词在前后快照中的出现次数,仅当新快照计数增加时返回结果,并在本次处理内避免同一关键词重复提示。
这种“差分计数”适合轻量提示,但不是完整文本编辑算法。若用户在文中移动内容、复制粘贴或同时输入多个词,触发时机取决于宿主事件粒度;子串匹配还可能把一个短词当成长词的一部分。可以按语言设计边界策略、对同一段落设置冷却时间,并用 Unicode、标点、重复短语、撤销重做和大段粘贴构造测试样例。
编辑器桥接比轮询更明确
插件从宿主服务初始化文本,并订阅宿主的编辑事件,而不是持续扫描整个页面。这减少无意义轮询,也把功能范围限制在明确的文档上下文。宿主桥接仍需定义事件版本、文档切换、离开编辑页、权限撤销与监听取消行为。禁用功能时应停止监听;组件卸载后不能再弹出提示或播放音频。若宿主没有可靠的 unsubscribe API,就需要在集成协议中补齐可撤销订阅。
最重要的是隐私透明:编辑正文可能包含客户信息、未公开方案或个人数据。当前审阅确认了客户端通过宿主桥接读取文本,但没有完整追踪语音生成请求的载荷、第三方处理与留存策略。因此不能据此宣称“文本绝不离开设备”。上线前应画清数据流;优先让关键词匹配在本地完成,默认关闭远程语音,展示会发送哪些字段、发送给谁,并提供逐次授权和立即关闭。
音频反馈要由用户发起
播放层集中管理音频源和停止动作,自动模式组件暴露静音、音量、语速/声音与开关控制。声音能让微小的正向反馈更有存在感,也可能在会议、夜间或公共场所造成打扰。必须有明显静音、总开关、音量控制和“停止当前播放”;浏览器可能阻止未经用户手势的自动播放,因此首次启动应由点击明确开启,并对播放失败给出静默/可视化回退,而不是不断重试。
提示也不能把“正向词汇触发”变成持续打断。建议采用短暂动画、单次提示、可配置冷却时间、减少动态效果和勿扰时段;自动模式默认关闭,用户明确开启后才读取编辑活动。为避免提示本身抢走焦点,不应把焦点移出编辑器,也不应在每次匹配时弹模态框。
它与防发呆功能的区别
编辑内容匹配能识别“出现了某类文本”,无法判断用户是否走神,也不应推断情绪、工作效率或人格。真正的闲置提醒只需检测页面可见性、输入/滚动等近期交互时间,并在本地计时;浏览器标签隐藏时暂停,用户可配置阈值和关闭提醒。两个功能可以共用轻量声音/动画组件,但要分别命名、分别授权、分别设置,不把文档正文上传来判断注意力。
验收清单
- 验证启用、禁用、切换文档和卸载时监听器数量归零。
- 测试大小写、Unicode、标点、嵌套短词、重复文本、撤销和整段粘贴。
- 明确关键词匹配和语音服务的数据流、网络请求、留存与授权;拒绝路径不得偷偷上传正文。
- 在静音、音量、冷却时间、勿扰和减少动态效果开启时重复操作。
- 首次播放由用户手势触发;浏览器拒绝播放时优雅退化,不循环重试。
- 用屏幕阅读器和键盘验证提示可感知但不抢焦点、不覆盖编辑内容。
这次仅静态阅读个人插件的监听、匹配、音频和自动模式模块,没有运行浏览器宿主、真实语音服务或隐私代理测试。上文明确保留了数据流未完全验证这一限制;它不是生产插件安全认证,也不把关键词匹配说成注意力检测。
参考:MDN 自动播放指南、MDN Web Audio API、OWASP Authorization Cheat Sheet。
Live Notes
留言提交后会先进入审核,审核通过后对其他读者公开。