mirror of
https://github.com/kuaifan/dootask.git
synced 2026-07-28 17:06:00 +00:00
页面操作(doo page → /ws → 浮窗 operation-module → action-executor)原用手写 iView-only 选择器 + 朴素 value= 赋值,在 React+Radix 同源 iframe 业务表单上几乎 填不进。重构为「复用 Playwright 注入脚本的描述层 + 按环境选后端的执行层」: 描述层(共用): - 新增 aria/aria-bundle.js,vendoring Playwright ariaSnapshot/roleUtils/domUtils 子集预构建为 ESM(Apache-2.0 NOTICE + 固定上游 commit),产出 YAML 快照与活的 ref→Element Map。 - page-context-collector 改用 buildSnapshot 采集,operation-module 经 setRefMap 以 Map 直接持有元素取代 selector 反查。 执行层(按环境选后端,失败回退): - web-backend:原生 prototype value setter + beforeinput/input/change/blur 序列 + 回读校验(不符报 value_not_applied,绝不假报成功);自定义下拉/日期 open→click。 - electron-backend + electron/lib/page-input.js:经 webContents.debugger 走 CDP Input 域产生 isTrusted=true 可信输入(insertText/dispatchMouseEvent/KeyEvent), 任一步失败回退 Web 后端。 - 复杂控件(动态明细表/成员选择器/文件上传)如实返回 unsupported_widget。 协议与链路(doo page、active-context 失效守卫、导航类 action)保持不变。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
29 lines
872 B
JavaScript
Vendored
29 lines
872 B
JavaScript
Vendored
/**
|
||
* 输入后端选择
|
||
*
|
||
* - Electron 桌面端且 CDP 桥可用 → ElectronInputBackend(可信输入),失败回退 Web。
|
||
* - 其他环境 → WebInputBackend(页面内合成事件,地板)。
|
||
*
|
||
* 描述/定位层(ariaSnapshot + ref→Element)与后端无关,由 collector/executor 负责;
|
||
* 后端只接收已定位的 element + action + value。
|
||
*/
|
||
|
||
import { createWebBackend } from './web-backend';
|
||
import { createElectronBackend, isElectronInputAvailable } from './electron-backend';
|
||
|
||
let _web = null;
|
||
let _electron = null;
|
||
|
||
export function selectBackend() {
|
||
if (isElectronInputAvailable()) {
|
||
if (!_electron) _electron = createElectronBackend(() => getWebBackend());
|
||
return _electron;
|
||
}
|
||
return getWebBackend();
|
||
}
|
||
|
||
export function getWebBackend() {
|
||
if (!_web) _web = createWebBackend();
|
||
return _web;
|
||
}
|