Repository navigation
[Bug] 安卓语音输入:输入法组字里带换行时,输入框只落地一部分文本(首段整段丢失) #6550
Replies: 1 comment
这条和 #6552 是同一位同学、同一份内容——完整分析我写在那边了你和 #6552 是同一个问题(同一份复现、同一份埋点)。我在那边给了完整回复,把要点搬过来,省得你在两条之间跳: 1. 决定性的证据在你自己的埋点里
⇒ 首段从来没有进入编辑器的 DOM。 所以 2. 可以排除"是 DSH 的文本管线丢的"我在你那个版本( 3. 机制一次组字里带换行时,组字区跨了 block 边界;你埋点里的 4. 现在能用的规避
5. 真修的方向不是"取消区"逻辑,而是别在组字进行中重建块 DOM——把换行导致的段落拆分推迟到 两条按一条跟就行,不必分别处理;细节与逐条证据都在 #6552 那条回复里。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
环境
现象
用语音说一段话,等输入法「AI 整理」完成后,输入框里的文本会比整理版少一整段:
说明:输入法把口述重写、压缩是它自己的功能,不算 bug。这里只针对整理后的文本没有完整落地。
复现步骤
关键证据(客户端埋点:composition / beforeinput / input + DOM 变更)
一次典型现场(
t是页面内相对毫秒):同一次口述里,输入法先后声明的组字文本是:
d=105(未整理原文)→d=58(整理版,两行)→d=41(只剩第二行)。输入法声明的组字文本里有换行,而落进编辑器的只剩换行之后那一段。
对照组:
定位
insertCompositionText组字区跨段落的边界处理,与编辑器的 DOM 重建叠加导致的;期望行为
compositionend之后,这一段的实际文本不应该少于输入法在compositionupdate/compositionend里声明的文本。建议的修复方向
compositionend后做一次完整性校验:拿输入法声明过的文本与该段实际文本比对;如果声明文本更长、且实际文本是它的连续子串,就按声明文本用受控插入补全(不要重新进入组字);beforeinput(insertCompositionText)检测到data含\n时,别让组字区跨段落推进(例如先把整段落进单个 block,再由编辑器自行拆段);附:我这边做的临时缓解(没有改宿主代码)
在客户端注入一段只读监听 + 静默修补脚本:组字期间记录输入法声明过的每一版文本;
compositionend之后如果框里该段文本是其中某一版的连续子串、而且更短,就按那一版补全(只补不删,措辞变化一律尊重输入法的整理结果)。这能消除现象,但它属于事后修补,根治还是要在编辑器层做。All reactions