Bug 报告Chromium 149 Windows 中文输入首次输入丢失English | 中文报告人Web-text 项目组日期2026-06-10影响组件Chromium 引擎 Windows 桌面端 IME 合成事件派发严重程度高 — 导致所有基于 contenteditable 的编辑器中文/日文/韩文输入异常影响范围Chromium 149.0.7827.103 及以上版本的 Windows 桌面端包括 Google Chrome 和 Microsoft Edge其他浏览器及旧版 Chromium 不受影响 进展更新已正式提交至 Chromium 官方团队我已经将该 Regression Bug 详细报告并提交至 Chromium 团队进行底层排查。如果你也遇到了同样的问题或者希望加速官方的修复进度请前往以下 Chromium 官方单子点击页面右上角的1(Upvote)按钮为该 Bug 投票 Chromium 官方 Issue #523134891这会显著提升 Chromium 团队对该输入法 Bug 的排查优先级1. 问题概述在 Windows 桌面端的 Google Chrome149中使用输入法IME向contenteditable元素输入内容时第一次合成输入会被静默丢弃用户必须再次输入相同内容才能成功写入编辑器。使用微软拼音时中文标点句号、逗号、冒号等每次都需要按两次才能出一个使用 QQ 拼音时所有中文输入包括汉字和标点都需要按两次。这是 Chromium 引擎的回归 Bug。我们通过系统的跨浏览器对比测试确认Firefox、夸克浏览器、Electronv39.2.7内置浏览器均不受影响。值得注意的是Microsoft Edge 在升级到 Chromium 149.0.7827.103 之前也不受影响升级之后出现了完全相同的问题——这证实根因在 Chromium 149.0.7827.103 引入的代码变更中。我们也确认这不是React 或uiw/react-codemirror的问题——我们完全绕过了 React 包装层直接使用 CodeMirror 6 原生EditorViewAPIBug 依然存在。2. 测试环境项目详情操作系统Windows 11 Version 25H2 (Build 26200.8457)受影响浏览器Google Chrome 149.0.7827.102Chromium 149.0.7827.102同样受影响Microsoft Edge 149.0.4022.62Chromium 149.0.7827.103——从 149.0.4022.52 升级后出现不受影响Firefox 150.0.3 / 151.0.4、Microsoft Edge 149.0.4022.52Chromium 149.0.7827.54、夸克浏览器 144.0.7559.86、Electronv39.2.7内置浏览器Chromium 142.0.7444.235编辑器框架CodeMirror 6codemirror/view6.43.0React 版本React 19 Next.js 16去掉 React 后问题依旧测试输入法微软拼音、QQ 拼音EditContext未启用——CodeMirror 6 仅在 Android 上启用 EditContext桌面 Chrome 使用传统 contenteditable 模式2.1 浏览器版本详情Google Chrome受影响Google Chrome 149.0.7827.102 (正式版本) 64 位 修订版本 112f665d98a2fe84b156c74fbea2aed742f16c15 操作系统 Windows 11 Version 25H2 (Build 26200.8457) JavaScript V8 14.9.207.27Microsoft Edge不受影响升级前Microsoft Edge 149.0.4022.52 (正式版本) (64 位) Chromium 版本 149.0.7827.54 JavaScript V8 14.9.20.6Microsoft Edge受影响升级到 Chromium 149.0.7827.103 后Microsoft Edge 149.0.4022.62 (正式版本) (64 位) Chromium 版本 149.0.7827.103 JavaScript V8 14.9.20.8Mozilla Firefox不受影响150.0.3 (64 位) → 151.0.4 (64 位) — 均不受影响夸克浏览器不受影响夸克 144.0.7559.86 (正式版本) 64 位 修订版本 0692bb4c7f582f78a657917cddc1fef727422efe 操作系统 Windows 11 Version 25H2 (Build 26200.8457) JavaScript V8 14.4.258.18关键发现Microsoft Edge 在 Chromium 149.0.7827.54 时正常升级到 Chromium 149.0.7827.103 后出现 Bug。这精确地将问题定位到 Chromium 149.0.7827.54 和 149.0.7827.103 之间引入的回归。3. 详细症状描述3.1 基本规律所有通过键盘直接输入的英文字符和符号均正常。问题仅出现在 IME 合成输入时。3.2 症状 A中文标点需要输入两次使用微软拼音切换到中文输入模式连续按两次句号键——仅第二次句号。出现按句号键。——编辑器中什么都没有出现再按逗号键——逗号出现了但之前按的句号。仍然丢失需要按两次中文标点《》。、“”|·……——等其他已知问题【 或 ‘ 会左移动输入光标】或 ’ 会右移动输入光标注意两次输入不需要是同一个符号。例如第一次输入逗号第二次输入句号。句号会成功写入。反过来也一样。第二次 IME 合成总是能成功无论是否与第一次相同。复现步骤见6.1或6.23.3 症状 BQQ 拼音——所有输入都需要两次使用QQ 拼音输入nihao从候选列表选择你好——编辑器中什么都没有出现输入nibuhao选择你不好——你不好出现了但之前的你好仍然丢失规律每次会话的第一次合成总是丢失第二次成功3.4 症状 C微软拼音——汉字能输入标点不行使用微软拼音中文汉字输入如输入nihao 空格得到你好第一次就能成功中文标点。等需要输入两次才能写入见症状 A微软拼音和 QQ 拼音之间的这种差异表明Bug 由不同输入法产生的特定 IME 事件序列触发。4. 跨浏览器验证我们在同一台 Windows 机器上使用同一个编辑器、同一种输入法对多个浏览器进行了系统测试浏览器版本Chromium 版本中文标点微软拼音中文汉字QQ拼音状态Google Chrome149.0.7827.102149.0.7827.102失败需输入两次失败需输入两次存在 BugMicrosoft Edge149.0.4022.62149.0.7827.103失败需输入两次失败需输入两次存在 BugMicrosoft Edge149.0.4022.52149.0.7827.54正常正常不受影响Electronv39.2.7内置浏览器Electron 39.2.7142.0.7444.235正常正常不受影响Mozilla Firefox150.0.3 / 151.0.4N/A正常正常不受影响夸克浏览器144.0.7559.86144.0.7559.86正常正常不受影响关键结论Bug 更可能位于Chromium 引擎层面的 IME 集成逻辑而非 Google Chrome 特有代码。当前测试中使用旧版 Chromium 的浏览器未观察到相同现象。Microsoft Edge 从 Chromium 149.0.7827.54 升级到 149.0.7827.103 后出现 相同现象表明问题很可能是在 Chromium 149.0.7827.54 至 149.0.7827.103 之间引入的回归。5. 技术分析5.1 已确认不是 React 或 uiw/react-codemirror 的问题我们最初怀疑问题出在uiw/react-codemirror的受控value属性同步机制上——当 React 的value属性变化时它会派发ExternalChange事务。为了验证这个假设我们完全绕过了 React 包装层直接使用 CodeMirror 6 原生EditorViewAPI// 直接使用 CodeMirror 6 API — 无 React 包装无 value 属性同步constviewnewEditorView({state:EditorState.create({doc:value,extensions:[markdown(),EditorView.lineWrapping,updateListener],}),parent:container,});结果Bug 在 Chrome 中依然存在。这确认了问题不在 React 包装层或值同步机制而在 Chrome 自身的 IME 事件处理中。5.2 核心发现首次异常输入时未观察到任何 IME 相关事件无论是编辑器内部监听器还是外部监听器均未接收到compositionstart、beforeinput、input、compositionend等事件。这表明 Chromium 可能抑制了首次 IME 合成事件或者未能正确派发相关事件第二次输入时相关事件均能够正常触发。。具体根因仍需要 Chromium 团队进一步确认。验证方法在 Chrome DevTools Console 中执行以下代码然后尝试输入中文标点document.addEventListener(compositionstart,()console.log([IME] compositionstart),true);document.addEventListener(compositionend,()console.log([IME] compositionend),true);document.addEventListener(beforeinput,(e)console.log([IME] beforeinput:,e.inputType,e.data),true);第一次输入时Console 中完全没有日志。第二次输入时所有事件正常打印。5.3 为什么其他浏览器不受影响Firefox使用不同的合成事件模型IME 事件在第一次输入时正确派发。EdgeChromium 149.0.7827.54使用未包含该回归的旧版 Chromium。升级到 149.0.7827.103 后出现相同 Bug确认回归在 Chromium 引擎中。Electronv39.2.7内置浏览器Chromium 142.0.7444.235使用未包含该回归的旧版 Chromium。夸克浏览器自定义 Chromium 分支未引入该回归。5.4 EditContext 不是原因我们确认 CodeMirror 6 的EditContextAPI仅在 Android 上启用codemirror/view6.43.0中的browser.android检查。桌面 Chrome 使用传统的contenteditablecompositionstart/compositionend事件模型。因此这与之前报告的 Chromium Bug #351029417EditContext IME 字符边界问题无关。6. 复现步骤6.1 最简复现方式复现此问题具体步骤在 Windows 上用 Google Chrome149在线演示https://web-text.ale160.com/复现项目源码https://github.com/ale-160/web-text点击编辑器聚焦切换到中文输入法微软拼音或 QQ 拼音尝试输入中文句号。——观察它不会出现再输入一个字符——观察第二个字符出现了但第一个丢失6.2 详细复现步骤在 Windows 上用 Chrome 打开 在线测试 或本地测试点击编辑器聚焦场景 1中文标点微软拼音切换输入法为微软拼音按.键句号——期望。出现实际结果什么都没有出现。第一次输入被静默丢弃。按,键逗号——期望出现实际结果出现了确认第二次输入成功场景 2中文汉字QQ 拼音切换输入法为 QQ 拼音键盘输入nihao从候选弹窗中选择你好实际结果编辑器中什么都没有出现。第一次合成丢失。再次输入nihao并选择你好实际结果你好出现了确认第二次合成成功7. 我们的排查历程我们在确认这是 Chromium 引擎回归之前花了大量时间排查。以下是排查过程摘要第 1 轮合成事件守卫在onChange中添加!update.composing检查在handleCompositionEnd中添加setTimeout(0)。结果无改善。第 2 轮移除手动合成事件监听移除所有手动compositionstart/end监听器仅依赖 CodeMirror 内置的update.composing。结果无改善。第 3 轮切换到 uiw/react-codemirror React 组件将编辑器重写为使用uiw/react-codemirror的CodeMirrorReact 组件替代自定义EditorView。结果无改善。第 4 轮全面控制台日志添加详细的onUpdate和onChange日志追踪每个事务、注解和 DOM 变更。结果发现update.composing返回undefined而非false以及uiw/react-codemirror内部的typingLatch机制200ms 超时锁和ExternalChange注解。第 5 轮跨浏览器测试在 Chrome、Firefox、Edge、夸克浏览器和 Electronv39.2.7内置浏览器中系统测试。结果最初发现仅 Google Chrome 存在 Bug。第 6 轮合成缓冲绕过方案在handleChange中实现缓冲机制检测viewUpdate.composing状态在合成期间缓冲 onChange 调用合成结束后延迟 50ms 刷新。结果无改善——第一次 IME 输入根本没到达 JavaScript 事件系统。第 7 轮移除 internalValue 状态移除导致 React 重渲染竞态条件的internalValue状态和useEffect同步。结果无改善——Bug 不是由 React 重渲染引起的。第 8 轮完全绕过 uiw/react-codemirror彻底移除uiw/react-codemirrorReact 包装层直接使用 CodeMirror 6 原生EditorViewAPI在单个useEffect([], [])中创建编辑器无任何 value 属性同步。结果无改善——即使没有任何 React 值同步机制Bug 依然存在。这最终证明问题在 Chromium 的 IME 事件处理中而非应用代码。第 9 轮Edge 升级回归测试将 Microsoft Edge 从 Chromium 149.0.7827.54 升级到 149.0.7827.103。结果Edge 从不受影响变为受影响确认这是 Chromium 引擎在 149.0.7827.54 到 149.0.7827.103 之间引入的回归。8. 社区独立确认和相关 Issue8.1 社区独立确认该问题已在多个社区被独立报告或讨论洛谷社区CodeMirror 官方论坛W3C 邮件列表这些独立报告表明该问题并非单一用户环境导致且已被不同社区用户重复观察到。。8.2 可能相关Issue编号标题状态关联性Chromium #351029417EditContext 下 IME 候选框位置错误已修复2024年9月同属 IME contenteditable 领域但症状不同。本案未使用 EditContext。CodeMirror dev #13966.28.2 版本中文输入法异常已修复6.28.3/6.28.4相关——Chrome 中 CodeMirror 的 IME 处理。症状不同候选框位置跳动非输入丢失。CodeMirror dev #1688Chrome 中括号内 IME 合成后文字消失已关闭相关——Chromecompositionend同步时序导致 DOM 问题。CodeMirror dev #1654装饰节点中 IME 合成问题已修复6.39.7相关——Chrome 在合成期间复用 DOM 节点。CodeMirror dev #1472IME 合成期间字符偏移已修复相关——EditContext 合成文本偏移处理。Chromium #379170477EditContext 合成期间文本变更偏移开放相关——EditContext IME 处理。9. 建议 Chromium 团队调查的方向首次 IME 合成事件被抑制最关键的发现是 Chromium 静默抑制了第一次 IME 合成——第一次 IME 输入后compositionstart、beforeinput、input、compositionend均未被派发。请调查 Chromium 的 Windows IME 集成为何在首次合成时未能派发这些事件。Chromium 149.0.7827.54 到 149.0.7827.103 之间的回归Microsoft Edge 在 Chromium 149.0.7827.54 时正常升级到 149.0.7827.103 后出现 Bug。建议在这两个版本之间进行二分查找定位引入回归的具体提交重点关注 IME 相关的变更。10. 影响评估此 Bug 目前观察到该问题会影响基于 CodeMirror 6 的编辑器以及可能的其他基于 contenteditable 的编辑器在 Chromium 149.0.7827.103 的 Windows 桌面端使用中文/日文/韩文输入法时的正常使用。考虑到Chrome 全球浏览器市场份额约 65%CodeMirror 6 被数千个 Web 应用使用文档站点、笔记应用、IDE、CMS 系统等此 Bug 导致基本的中文字符/部分输入法中文的输入不可用此 Bug 会显著影响中文输入体验并导致部分输入内容丢失回归已蔓延到 Microsoft Edge对于依赖 IME 输入的 CodeMirror 用户而言这属于较为严重的可用性回归问题。11. 临时解决方案在 Chromium 修复此 Bug 之前应用层面没有可靠的绕过方案。我们在 JavaScript/React 层面已穷尽所有方法合成事件缓冲无效因为第一次 IME 输入根本没到达 JavaScript 事件。绕过 React 包装层无效因为 Bug 在 Chromium 的事件派发中而非应用代码。直接使用 CodeMirror 6 API同理无效。目前可行的变通方案建议用户切换到其他浏览器Firefox、夸克进行中文输入或使用旧版 Chromium149.0.7827.103 之前。关注 CodeMirror Issue Tracker等待编辑器库层面的 Chromium 专项修复或绕过方案。向 Chromium 提交 Bug 报告 https://bugs.chromium.org/ 引起 Chromium 团队的关注。12. 参考资料在线测试https://web-text.ale160.com/复现项目源码https://github.com/ale-160/web-text洛谷公告中文社区确认https://www.luogu.com.cn/discuss/1303381CodeMirror 论坛讨论高社区关注度https://discuss.codemirror.net/t/chinese-ime-punctuation-input-loses-every-other-keypress-requires-2-presses-per-character/9741W3C 官方邮件列表根因Chrome 错误https://lists.w3.org/Archives/Public/public-webapps-github/2025Apr/0087.html