输入法(IME)支持
CefTexture 为网页内容中的文本输入提供自动输入法(IME)支持。当您点击浏览器中的输入框时,系统输入法会自动激活,允许您输入中文、日文、韩文等语言的文本。
工作原理
自动激活
- 当 CEF 中的可编辑元素(input、textarea 或 contentEditable)获得焦点时,Godot 的原生输入法会自动激活
- 一个隐藏的 LineEdit 代理捕获输入法输入并将组合文本转发给 CEF
- 当可编辑元素失去焦点时,输入法会自动停用
光标位置跟踪
输入法候选窗口通过双机制方法定位在文本光标附近:
基于 JavaScript 的跟踪:注入到每个页面的辅助脚本在以下情况报告光标位置:
- 初始聚焦可编辑元素时
- 选择变化(点击重新定位光标)
- 文本输入(包括删除、粘贴等)
- 方向键导航
CEF 组合回调:在活动输入法组合期间,CEF 的
on_ime_composition_range_changed回调提供精确的光标边界
两种机制写入同一队列,确保输入法窗口在整个编辑会话中保持正确定位。
焦点处理
当点击已聚焦的可编辑元素内部以重新定位光标时:
- 系统检测到焦点转移到父级 CefTexture
- 焦点自动重新获取到输入法代理以维持输入能力
- 这可以防止在光标重新定位期间输入法被错误停用
配置要求
- 您必须为要输入的语言配置并启用系统输入法/输入源
- 输入法外观和候选窗口定位可能因平台和窗口管理器而异
- 在 Godot 不公开原生输入法支持的平台上,CefTexture 中的输入法行为可能受限或不可用
使用方法
输入法支持自动工作,无需在代码中进行额外配置。只需确保:
- 您的系统已安装适当的输入法
- 您加载的网页内容使用标准 HTML 输入元素(
<input>、<textarea>或contentEditable) - 用户可以正常与 CefTexture 节点交互
gdscript
# No special setup needed for IME
extends Control
@onready var browser = $CefTexture
func _ready():
browser.url = "https://example.com/form" # Page with text inputs
# IME will work automatically when users click on input fields支持的元素类型
| 元素类型 | 支持 |
|---|---|
<input type="text"> | ✅ 完全支持 |
<textarea> | ✅ 完全支持 |
contentEditable 元素 | ✅ 完全支持 |
<input type="password"> | ✅ 完全支持 |
| 其他输入类型 | ⚠️ 因类型而异 |
故障排除
输入法窗口出现在错误位置
- 确保您使用的是标准 HTML 输入元素
- 具有不寻常 CSS 的自定义样式输入可能会影响光标位置计算
- 尝试直接点击输入字段以触发位置重新计算
输入法未激活
- 验证您的系统输入法是否正确配置
- 检查元素是否为标准可编辑元素
- 确保 CefTexture 在 Godot 场景中有焦点
输入法意外停用
- 这可能在点击可编辑元素外部时发生
- 点击页面的非可编辑区域将按预期停用输入法