Skip to content

输入法(IME)支持 ​

CefTexture 为网页内容中的文本输入提供自动输入法(IME)支持。当您点击浏览器中的输入框时,系统输入法会自动激活,允许您输入中文、日文、韩文等语言的文本。

工作原理 ​

自动激活 ​

  • 当 CEF 中的可编辑元素(input、textarea 或 contentEditable)获得焦点时,Godot 的原生输入法会自动激活
  • 一个隐藏的 LineEdit 代理捕获输入法输入并将组合文本转发给 CEF
  • 当可编辑元素失去焦点时,输入法会自动停用

光标位置跟踪 ​

输入法候选窗口通过双机制方法定位在文本光标附近:

  1. 基于 JavaScript 的跟踪:注入到每个页面的辅助脚本在以下情况报告光标位置:

    • 初始聚焦可编辑元素时
    • 选择变化(点击重新定位光标)
    • 文本输入(包括删除、粘贴等)
    • 方向键导航
  2. CEF 组合回调:在活动输入法组合期间,CEF 的 on_ime_composition_range_changed 回调提供精确的光标边界

两种机制写入同一队列,确保输入法窗口在整个编辑会话中保持正确定位。

焦点处理 ​

CefTexture 与隐藏的 LineEdit 共用一个逻辑浏览器焦点。再次点击可编辑元素时, Godot 焦点转移到代理,不会使 CEF 失去焦点。点击其他 Godot 控件后,浏览器会 交出焦点;延迟到达的输入法事件不会将焦点抢回。浏览器或窗口失去焦点、控件 被隐藏或暂停时,尚未完成的输入法组合会被取消。

指针事件遵循 Godot 的 GUI 命中测试、mouse_filter、坐标变换和捕获规则。 在浏览器内按下后,即使移到控件外,浏览器仍能收到移动和释放事件。键盘事件 仅转发给拥有焦点的浏览器。传入的 Godot 事件不会被修改,因此多个浏览器控件 可以与原生控件共存。手动向 CefTexture2D 转发事件的使用方仍需自行管理焦点 和指针路由。

配置要求 ​

  • 您必须为要输入的语言配置并启用系统输入法/输入源
  • 输入法外观和候选窗口定位可能因平台和窗口管理器而异
  • 在 Godot 不公开原生输入法支持的平台上,CefTexture 中的输入法行为可能受限或不可用

使用方法 ​

输入法支持自动工作,无需在代码中进行额外配置。只需确保:

  1. 您的系统已安装适当的输入法
  2. 您加载的网页内容使用标准 HTML 输入元素(<input>、<textarea> 或 contentEditable)
  3. 用户可以正常与 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 场景中有焦点

输入法意外停用 ​

  • 这可能在点击可编辑元素外部时发生
  • 点击页面的非可编辑区域将按预期停用输入法