Skip to content

输入法(IME)支持

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

工作原理

自动激活

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

光标位置跟踪

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

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

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

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

焦点处理

当点击已聚焦的可编辑元素内部以重新定位光标时:

  • 系统检测到焦点转移到父级 CefTexture
  • 焦点自动重新获取到输入法代理以维持输入能力
  • 这可以防止在光标重新定位期间输入法被错误停用

配置要求

  • 您必须为要输入的语言配置并启用系统输入法/输入源
  • 输入法外观和候选窗口定位可能因平台和窗口管理器而异
  • 在 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 场景中有焦点

输入法意外停用

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