Skip to content

feat(vom): discover canvas candidates and resolve visible regions | 发现 canvas 候选并计算可见区域 - #205

Draft
Ljy-0827 wants to merge 3 commits into
mainfrom
feat/canvas-region-discovery
Draft

feat(vom): discover canvas candidates and resolve visible regions | 发现 canvas 候选并计算可见区域#205
Ljy-0827 wants to merge 3 commits into
mainfrom
feat/canvas-region-discovery

Conversation

@Ljy-0827

@Ljy-0827 Ljy-0827 commented Sep 9, 2026

Copy link
Copy Markdown
Collaborator

变更概述

在现有观察采集数据上增加 Canvas 候选发现,识别具有可见区域的 Canvas,并提供所属 frame、DOM 身份、元素外框和裁剪区域,为后续视觉选择、ref 注册及截图提供输入。

本 PR 完成内部候选发现与区域计算,尚未接入 observe 输出、注册视觉 ref 或执行截图。

问题与实现

1. 现有采集数据缺少视觉区域判断所需的事实

Canvas 的可见性和截图范围不仅取决于自身尺寸,也受到祖先样式、overflow 裁剪和 frame 边界影响。

  • 补充必要的样式与 client 矩形信息。
  • 在现有 DOM 索引中记录祖先链完整性。
  • 按所属 frame 的 DOM 共享坐标转换信息与投影,复用已有采集和身份验证结果。

2. Canvas 候选需要独立于语义节点筛选

没有名称或 AX 语义的 Canvas 仍可能包含需要观察的内容。

  • 从已采集的 Facts 中发现 Canvas,关联经过验证的 DOM 身份。
  • 根据视觉状态判断候选,不因缺少名称、aria-hidden、inert 或 pointer-events:none 直接排除。
  • 排除隐藏、零尺寸、完全裁剪及扩展 overlay 中的 Canvas。

3. 可见区域需要统一处理坐标与祖先裁剪

  • 复用上游快照单位归一化和跨 frame 投影,统一输出顶层视口 CSS 坐标。
  • 结合祖先 overflow、frame 边界及视口计算可见区域,并保留裁剪来源。
  • 将区域规则集中为纯计算模块,供后续实时截图核验复用。
  • 对祖先缺失、DOM 身份未验证、几何不可用或不支持的情况明确报告,不猜测区域。

实现范围与开销

  • 候选发现只消费现有 Facts,不新增 CDP 请求或重新采集页面。
  • 通过单次调用内的祖先结果缓存和共享裁剪链,减少重复遍历。
  • 采集阶段增加必要的样式字段和 client 矩形数据,不引入新的全页采集流程。

验证

  • 扩展回归、VOM 测试、类型检查、改动文件 lint 和构建通过。
  • 独立 Chrome 几何测试覆盖原生设备缩放、浏览器缩放、滚动及嵌套 iframe,5 组通过。
  • 真实 iWiki 的同批次采集正确发现 Canvas 候选,裁剪来源及最终区域与独立 DOM 测量一致.

@Ljy-0827
Ljy-0827 added this pull request to stack #210 September 9, 2026 14:08
@Ljy-0827
Ljy-0827 force-pushed the feat/canvas-region-discovery branch from fa0952a to fecb38b Compare September 10, 2026 04:21
@Ljy-0827 Ljy-0827 self-assigned this Sep 10, 2026
@Ljy-0827
Ljy-0827 force-pushed the feat/canvas-region-discovery branch from fecb38b to e25061e Compare September 10, 2026 07:46
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