Appearance
适用范围与已知边界
来源:
table-flow/docs/SCOPE_AND_FEATURES.md§一/二/五/六(删去扫描阈值与代码索引章节)。
一句话定位
TableFlow 从浏览器已经渲染出来的 DOM 上采集数据:页面上画出来的表格都能采(原生 <table>、div 型框架表格、iframe 里的表格);数据只存在于接口响应或 JS 变量里、从未渲染成 DOM 的列表采不到。
术语速查(给不看技术文档的用户)
| 界面/文档里的词 | 日常说法 |
|---|---|
| DOM / 渲染 | 浏览器按网页代码"画"出来的成品页面。插件只认画好的成品 |
| 原生表格 / div 表格 | 真表格(<table>)vs 用小方块拼出来的"仿表格"(Element UI、Ant Design 等框架都这么做) |
| iframe / 内嵌 | 网页里再开一扇小窗,窗里是另一张网页,像画中画 |
| 同源 / 跨域 | 同源=同一家网站自己的窗,能直接看进去;跨域=别人家的窗,中间有墙,只能"递纸条"(postMessage) |
| 跨域白名单 | 门禁名单。默认只放行政务类域名,其他站点的窗要在设置里手动放行 |
| 虚拟滚动 | 长列表只画看得见那几行,滚到哪画到哪。像老式电话簿只印当前一屏 |
| 封页 | 判断"这页已经采全了"才允许翻下一页;判断不了就停下来问你,而不是悄悄漏采 |
| 检查点 / 断点续采 | 下载断了能续传,采集也一样,大表按行记进度 |
| canvas 表格 | 用画笔画在画布上的表,本质是图片——看得到,读不出文字 |
场景覆盖矩阵
| 场景 | 状态 | 关键边界 |
|---|---|---|
原生 <table>(含无 thead、表头表体分离、<td> 内嵌套子表) | ✅ 完整支持 | XHTML 页面同样兼容 |
| 已登记框架表格(Element UI / Element Plus / Ant Design / Bootstrap Table / Layui) | ✅ | 表头/固定列副本归并为同一张表;同源 iframe 内的框架表也可扫 |
| 未登记组件库(AG Grid、vxe-table、TDesign、Arco、Naive UI 等) | ⚠️ 降级 | 底层是原生 <table> 的可兜底采集;div 型行、表头分离、固定列克隆形态在适配前采不全 |
| ARIA Grid / Table | ✅ | 当前页读取 |
| 虚拟滚动表格(纵向) | ⚠️ | 自动滚动逐屏抓取去重;不返回单元格样式与合并信息 |
| 横向 / 双轴虚拟表格 | 🕐 未实现 | 尚未接入默认采集链路 |
| 同源 iframe(任意层级嵌套) | ✅ | 递归不限层级,扫描/读取/翻页/高亮/手动拾取全链路 |
| 跨域 iframe | ⚠️ | 白名单(.gov.cn / .mil.cn / .gov)或设置放开后可用;单帧 8 秒超时按空结果;帧内表不参与合并、帧内不支持手动拾取翻页入口 |
| 传统「下一页」按钮分页 | ✅ | 默认最大 50 页 |
| 页码序列分页器(只有 1 2 3 … N) | ✅ | 页码 +1 硬校验防静默跳页;三级自愈 |
| Load More / 无限滚动 | ⚠️ | 仅在检测到明确 append/load-more 证据时启用;无法证明完整即暂停或回退 |
| 手动拾取翻页入口 | ⚠️ | 30 秒无操作自动停止;跨域帧内不支持 |
| 多级表头与合并单元格 | ✅ | 上级 > 子级 命名;预览与导出同步还原 |
| 单元格内表单控件 | ✅ | 按可见值采集;密码脱敏、隐藏域不采 |
| 慢加载 / 采集期页面变化 | ✅ | 未加载完即扫描会给风险提示与重扫引导 |
| 断线续采与行级检查点 | ✅ | 旧版本检查点/模板向后兼容 |
| 预览 / 去重 / 导出全格式 | ✅ | 长数字防科学计数法;CSV 公式注入防护 |
| 模板系统 | ✅ | 合并表产物不可存为模板 |
| 离线激活(Pro 专属) | ✅ | 零网络本地验签;一文件一码 + 一文件一机 |
| 在线激活(hybrid) | ⚠️ | 本地验签即可用,后台惰性确认;服务器否决后恢复免费 |
| canvas 绘制的表格 | ❌ 不支持 | 本质是图片,明确不承诺 |
| 未渲染到 DOM 的数据 | ❌ | 只在接口响应 / JS 变量里 |
浏览器禁止注入页(chrome://、扩展商店、内置 PDF、about:/edge:) | ❌ | 面板提示不支持 |
srcdoc: / blob: / data: iframe | ❌ | 拿不到子帧脚本,放开跨域扫描也拒绝 |
| closed / 不可遍历 Shadow DOM | ❌/⚠️ | 仅可遍历的 open ShadowRoot 内表格按证据扫描 |
| Generic CSS Grid | 🕐 | 默认关闭,仅显式实验开关下只读评分,不进采集链路 |
| 内网在线模式(半离线服务器) | ❌ | 产品定案不做 |
| 旧版(RSA 签名)激活码 | ❌ | 不做兼容,需平台用新算法重签 |
已知边界(如实告知,不粉饰)
机制限制(浏览器架构决定)
- canvas 渲染的表格读不出文字。
- 数据没渲染到页面上就采不到;断网时拿不到未加载的数据。
- 宿主页面自己的 Shadow DOM:只有当前可遍历的 open ShadowRoot 内、且有 adapter 支撑的表格才保证;closed、不可遍历、重建后失去稳定定位的不保证。
- 浏览器禁止注入的页面无法工作。
主动取舍(为正确性牺牲便利)
- 尺寸门槛:iframe 可见尺寸过小(< 200×150)跳过跨域扫描;宽或高为 0 的表格跳过。
- 候选表上限:主文档与同源帧最多 20 张(跨域追加)。表特别多的页面建议先合并收敛。
- 超大虚拟列表:单次采集迭代上限动态估算(默认 200,最高 5000)防死循环;触顶未触底时以已采结果为准并上报诊断。
- 虚拟滚动采集不返回单元格样式与合并信息。
- 旧缓存/模板缺新字段时按旧语义解码,基础导出结构不变。
产品定案(明确不做)
- 内网在线模式;离线激活的联网撤销复检;免费翻页额度离线化;旧 RSA 码兼容。
- 注意:离线激活不经服务器登记,平台撤销后纯离线设备不会感知。
待补齐(不承诺时间点)
- 翻页拾取缺 Escape 取消、FAB 缺键盘 toggle、高亮仅靠颜色与动效表达(无障碍)。
- 横向/双轴虚拟表、Shadow 表格重建后的稳定定位、跨域帧内手动拾取与合并。
- 大表性能基线尚未建立。