架构设计:如何设计一个兼容 React/Vue/jQuery 的通用表单填充 SDK?

0 阅读2分钟

架构设计:如何设计一个兼容 React/Vue/jQuery 的通用表单填充 SDK?

摘要:企业级 SDK 开发难点解析。本文深入探讨 AutoForm SDK 的 Loader + Core 双层架构设计,以及如何解决多框架兼容性问题。


痛点分析

在做 AutoForm(智能表单填充工具)时,我们面临的挑战非常典型:

  1. 宿主环境复杂:客户的系统可能是 React 18,也可能是 Vue 2,甚至是 10 年前的 jQuery + iframe 嵌套。
  2. 性能要求苛刻:SDK 不能阻塞宿主页面的加载,体积必须极小。
  3. 功能复杂:需要集成 AI 对话、DOM 录制 (rrweb)、操作模拟等重型逻辑。

架构方案:Loader + Core 双层设计

为了平衡“功能强大”和“体积小巧”,我们采用了 微内核 + 动态加载 的架构。

1. Loader 层(极简入口)

  • 体积:< 5KB (Gzip)
  • 职责
    • 环境嗅探(判断当前 URL 是否有已录制的脚本)。
    • 渲染 UI 占位符(悬浮球)。
    • 配置初始化。
  • 技术栈:原生 Web Component,无任何第三方依赖。

2. Core 层(全功能引擎)

  • 体积:按需加载
  • 职责
    • DOM 分析器:生成唯一的 CSS 选择器和 XPath。
    • 操作模拟器:基于 @testing-library/user-event 模拟真实用户行为。
    • AI 客户端:与后端 LLM 进行流式对话。
  • 加载时机:仅当用户点击悬浮球时,Loader 才会通过 import() 动态拉取 Core 代码。

关键技术点:React/Vue 受控组件的“破局”

在 React 中,直接修改 input.value 是无效的,因为 React 的状态管理机制会忽略 DOM 的直接变更。

解决方案:

我们需要模拟完整的事件链,并“欺骗” React 认为这是用户输入的。

// 核心代码片段
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set;

function changeValue(input, value) {
  // 1. 调用原生 setter,绕过 React 的拦截
  nativeInputValueSetter.call(input, value);
  
  // 2. 触发 input 事件,通知 React 更新状态
  const event = new Event('input', { bubbles: true });
  input.dispatchEvent(event);
}

通过这种方式,AutoForm 成功实现了对 React 受控组件的完美支持。

结语

开发通用 SDK 是一项极具挑战的工作,需要对浏览器底层原理和各大框架机制有深入理解。

AutoForm 通过双层架构和底层事件模拟,成功实现了“一次集成,到处运行”的目标。


👉 官网地址:51bpms.com