Skip to content

feat(vom): enable screenshot-bound point interaction for visual surfaces - #143

Draft
Ljy-0827 wants to merge 2 commits into
fix/vom-canvas-observationfrom
feat/vom-surface-point-interaction
Draft

feat(vom): enable screenshot-bound point interaction for visual surfaces#143
Ljy-0827 wants to merge 2 commits into
fix/vom-canvas-observationfrom
feat/vom-surface-point-interaction

Conversation

@Ljy-0827

Copy link
Copy Markdown
Collaborator

问题描述

VOM 可以识别 Canvas 等视觉渲染区域,但当页面没有提供可靠的可访问性语义时,无法进一步读取其中的单元格、图表节点或其他交互对象。

宿主虽然可以通过截图理解这些内容,但此前缺少一条安全、通用的方式,将截图中的局部坐标转换为实际页面交互坐标。直接使用截图坐标还会受到 iframe 嵌套、裁剪、缩放和页面位置变化的影响。

此外,一些 Canvas 应用会在鼠标移动后的下一次渲染周期才更新命中状态。如果移动和按下事件连续发送,第一次点击可能只更新悬停位置,而没有真正命中目标。

解决方案

参考 codex 的实现方法,本 PR 为 VOM 中的视觉 Surface 增加基于截图的点交互能力:

  • 宿主可以截取指定 Surface,并使用截图中的局部坐标发起点击。
  • 截图与当前会话、标签页、Surface、页面状态和 frame 投影绑定,避免把旧截图坐标错误地应用到已经变化的页面。
  • 点击前重新校验 Surface 的位置、可见区域和页面环境;截图失效或坐标越界时明确拒绝执行。
  • 统一完成截图坐标到页面视口坐标的投影,支持裁剪、缩放以及嵌套或跨域 iframe。
  • 在鼠标移动和按下之间保留必要的调度边界,兼容采用异步命中检测的 Canvas 应用。
  • 该能力面向所有符合条件的视觉 Surface,不依赖站点注册、应用适配器或特定的 iWiki/iTable 逻辑。
  • 增加同源、跨域、嵌套 iframe 和异步 Canvas 命中的测试 fixture。

遗留局限

  • BrowserSkill 不理解 Canvas 内部的业务语义,不能直接知道“第几行第几列”或某个图表节点代表什么。
  • BrowserSkill 不内置视觉模型。截图内容的理解和目标坐标选择由宿主负责。
  • 当前 Surface 坐标交互只支持单次左键点击,不包括双击、右键、修饰键、拖拽或手势操作。
  • 截图凭证只能使用一次;页面导航、滚动、缩放、视口变化、frame 变化或 Surface 位置变化后,需要重新观察并截图。
  • 点击只负责命中截图中的位置。后续是否出现输入框、菜单或其他 DOM 控件由目标应用决定;如果应用暴露了新的可访问节点,宿主应继续使用普通 VOM 交互。
  • 对完全不响应合成鼠标事件、依赖特殊硬件输入或额外应用协议的页面,本方案无法保证完成交互。

@Ljy-0827
Ljy-0827 force-pushed the feat/vom-surface-point-interaction branch from 573dad1 to 976bce1 Compare August 26, 2026 07:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant