Bing 搜索栏中使用中文输入法导致删字修复

chuochuo22
2026-03-20T17:36:52Z

修复在 Bing 搜索栏中使用输入法时，光标前已有文字被删除的问题

Bing 搜索栏+中文输入法导致删字修复

修复在 Bing 搜索栏中使用微软拼音输入法时，光标前的文字消失的问题。

问题描述

在 Bing 搜索栏中输入中文时，输入法开始合成的瞬间，光标前已有的文字会被删除。

示例：

输入前：特斯拉采购200亿光伏设备
                ↑ 光标

输入"nihao"后按空格上屏「你好」：你好采购200亿光伏设备
                               （"特斯拉"消失）

根本原因

微软输入法在 compositionstart 之前会通过 beforeinput 派发一个原生的 deleteContentBackward 事件，导致浏览器删除光标前的所有文字。这是输入法与 Bing 搜索建议逻辑之间的兼容性问题。

修复原理

1. 在 keydown 时保存当前 input.value 和光标位置。若有选中文字，则预计算删除选中部分后的值。

2. 在 input（deleteContentBackward）时标记待恢复。

3. 在 compositionstart 时，使用底层原型 setter 恢复内容和光标，绕过 Bing 自身脚本的干扰。

退格键和 Delete 键不受影响，正常删除功能完全保留。

兼容性

✅ 光标在中间输入中文 — 前面文字正常保留

✅ 全选后直接输入 — 原文字正常替换

✅ 部分选中后输入 — 选中文字正常替换

✅ 退格键 / Delete 键 — 正常删字不受影响

✅ 英文输入 — 不受影响

✅ Bing 搜索建议 — 正常工作

✅ DOM 重建后自动重新绑定

✅ Microsoft Edge + 微软拼音

✅ Google Chrome + 微软拼音

已知限制

恢复文字时可能有约一帧（≈16ms）的闪烁。这是浏览器底层限制，在用户脚本层面无法消除。

使用的 AI 工具

本脚本在以下 AI 工具的协助下完成开发：

ChatGPT — 初步问题分析与早期方案

Claude — 根本原因排查、迭代调试与最终实现，以及撰写该附加信息

许可证

MIT