C6.25.3Per-app IME state persistence设计研究
应用间焦点切换时输入法状态是否保留因平台实现而不同
别名: 按应用记住输入法 · 焦点切换输入源 · 输入法跟随
概念解释
从聊天切到浏览器、再切回编辑器,有的系统给每个应用记住最后一次输入源,有的系统使用全局一份状态。是否保留没有跨平台约定。用户在聊天里切到拼音,去终端敲命令,可能仍是拼音,满屏组字;也可能终端自己回到英文,回来聊天却发现又变成英文。同一套操作在 macOS、Windows、iOS、Android 上的结果不同,文档不能写死“切走再回来一定还是刚才那种”。
机制
实现有两条常见策略。全局状态:输入源是会话级单例,跟随用户而不是窗口,优点是手不用为每个应用再切一次,缺点是把上一个应用的语言带到下一个。按应用(或按文本字段)记忆:每个客户端存一份,焦点回来时恢复,优点是终端保持英文、聊天保持拼音,缺点是用户要维护多份心智模型,且新建窗口可能没有历史。移动端还夹着“键盘随焦点弹出时才应用字段的 textContentType”,字段属性与系统记忆会打架。远程桌面再叠加一层:本地源与远端源哪边说了算,随客户端变化。
怎么研究
在目标平台上列出:应用 A 切到语言 1,切到应用 B 不碰输入源,再切回 A,语言是什么。覆盖系统应用、浏览器、Electron、游戏全屏。把“按应用记忆”和“按字段记忆”分开:同一浏览器里地址栏与页面输入框可能不同。不要从一块平台的观察推论到另一块。日志可取输入源变更事件,但要标注是否由用户手势触发。
边界
只开一个应用的人感觉不到策略差异。企业强制输入源策略会覆盖用户记忆。网页若在 focus 事件里自己调输入法 API(能调的平台很少),可能与系统记忆冲突。输入法崩溃重启后记忆常丢失,表现又变回全局默认。
怎么落地
- 产品文档按平台写清“离开再回来会怎样”,不要写跨平台的假保证。
- 终端、代码、密码类应用在获得焦点时,若检测到仍是组字源,给出一次性提示或提供应用内的“本次用英文”按钮。
- 测试矩阵包含:从本应用切到系统记事本再切回,输入源是否符合该平台策略。
- 验证:在每个支持的操作系统上做三次应用往返,记录语言是否保持;把结果写进发布说明,而不是只在开发机的那一块系统上点过。