浏览器批注可靠性
背景
Wework 浏览器批注通过注入页面的脚本选择目标元素、编辑评论,并把已发布批注转为工作区评论上下文。当前脚本在 document 捕获阶段监听点击。点击批注编辑器内的“发布”按钮时,捕获监听会早于按钮监听执行,并错误地使用上一个页面元素重新打开编辑器,造成发布偶发失灵或出现重复输入框。
设计
批注交互与页面选择必须是互斥的事件路径:
- 点击批注层内部控件时,文档级选择监听立即返回,不读取上一个页面元素,也不创建编辑器。
- 点击页面元素时,才阻止页面原始交互并打开一个批注编辑器。
- 每个编辑器持有自己的选框引用。发布和取消只操作该编辑器对应的选框,避免全局草稿引用被后续交互覆盖。
- 点击“发布”和在非输入法组合状态下按 Enter 使用同一个发布函数。
验证
回归测试必须执行真实的批注注入脚本和 DOM 事件,而不是只模拟已经发布的结果。覆盖以下行为:
- 选择页面元素后只出现一个编辑器。
- 点击“发布”生成一条批注、关闭编辑器,并保留带编号的选框。
- 发布按钮的点击不会再次选择页面元素或创建第二个编辑器。
- Enter 发布与点击发布结果一致。
- 连续标注多个元素时,批注内容、编号和选框一一对应。
范围
本次修复不改变批注数据结构、工作区评论格式或后端接口,只修正页面注入脚本的事件隔离和草稿生命周期。