1. 基础概念
插件化手册
  • FH2 插件开发手册
    • 产品简介
    • 典型场景
    • 发版说明
    • 快速开始
      • 快速开始总览
      • 第一个插件
      • 后端插件
      • 全栈闭环
    • AI辅助开发
      • AI 开发 Skill
      • 安装与复验
      • 第一个工程
      • 真实需求示例:现场问题上报
      • 改造已有工程
      • 调试与交付
    • 开发指南
      • 开发指南
      • 基础概念
        • 基础概念总览
        • 什么是插件开发
        • 平台架构
        • 前端宿主、扩展点与能力
        • 后端运行时、入口与权限
        • 开发流程
        • 安全与隔离
        • 支持范围与问题反馈
      • 开发指南
        • 开发指南总览
        • 前端插件
          • 前端插件深度指南
          • 前端工程结构
          • 插件清单(fh2-plugin.json)
          • 入口与生命周期
          • 界面与状态
          • 多宿主插件
          • 跨宿主通信服务
          • HTTP、WebSocket 与事件
          • 存储、Blob 与定时器
          • 工具链与本地调试页面
        • 后端插件
          • 后端开发深度指南
          • 后端插件的结构
          • 后端源清单 fh2-plugin.json
          • HTTP 接口处理函数
          • 消息订阅与事件处理函数
          • ctx 与能力注入
          • 数据存储与缓存
          • 流程编排
          • 触发方式
          • 连接外部系统
          • 流程编排练习(DAG)
        • 前后端协作
          • 前后端协作总览
          • 前后端共享契约
          • 端到端幂等
          • 事件、通知与状态
          • 统一错误模型
          • 链路标识与诊断日志
        • 完整练习
          • 环境准备
          • 第一个前端插件
          • 第一个后端插件
          • 第一个全栈插件
      • 能力总览
        • 能力地图
        • 能力可用性矩阵
        • 前端能力
          • 平台通用能力
            • 平台通用能力总览
            • 基础运行时:HTTP、事件、WebSocket 与存储
            • 导航、位置与通知
            • 弹窗、音频与剪贴板
            • 地图能力
            • 项目设备能力
            • WPMZ 与航线预览
            • 受控对象上传
          • 项目宿主
            • 项目宿主总览
            • 项目上下文
            • 项目侧边栏入口
            • 项目插件路由
            • 项目工作区
          • 消息宿主
            • 消息宿主总览
            • 消息告警弹层
            • 消息导航与通知
          • 计划库宿主
            • 计划库宿主总览
            • 计划库表单上下文
            • 计划库表单扩展
            • 校验、提交与 `biz_ext`
          • 驾驶舱
            • 驾驶舱插件能力总览
            • 驾驶舱扩展点
            • 上下文与遥测
            • 相机、检测与 AI
            • 场景几何与直播指针
            • 飞控、云台与任务
            • 驾驶舱平台事件
        • 后端能力
          • 后端能力地图
          • 后端能力总览
          • 配置、受管出网与集成连接
          • 事件与流程
          • 飞行任务与违停巡逻
          • 数据存储
          • 媒体与前端通知
          • 资源租约
          • 作业、目标轨迹与视频处理
      • 调试与测试
        • 调试与测试总览
        • 快速入门排错
        • 本地开发
        • Web IDE:打开工程与保存改动
        • 工作流编辑器:节点、接线与交付
        • 知识与 MCP:先判断需要哪一层事实
        • 前端本地调试
        • 后端运行时与流程调试
        • 模拟数据与测试数据
        • 集成测试与 E2E
        • 日志与链路追踪
        • 常见问题排查
      • 完整示例
        • 示例与案例总览
        • 项目侧边栏与工作区
        • 消息告警卡片
        • 计划表单任务清单
        • 驾驶舱动作与左侧面板
        • 最小后端插件
        • 最小全栈插件
        • 多宿主插件实战
        • 事故快处
        • 交通抓拍
        • 违停巡逻完整案例
      • 构建发布与安全
        • 构建、发布与安全
        • 质量门禁
        • 行业包构建与打包
        • 能力版本发布
        • 安装、升级与回滚
        • 安全基线
      • API参考
        • API 参考总览
        • 前端
          • 前端 API 参考
          • 前端插件清单结构
          • 前端 SDK API
          • 前端扩展点目录
          • 前端能力目录
          • 前端平台事件目录
          • 跨宿主通信服务 API
          • 工具链命令行参考(`fh2-plugin`)
        • 后端
          • 后端 API 参考
          • 后端插件源清单
          • 后端 HTTP 接口参考
          • 后端事件消费参考
          • 后端脚本上下文(`ctx`)
          • 后端数据存储
          • 流程编排语言
          • 流程触发器参考
          • 后端能力目录
          • 后端 HTTP API
        • 共享契约
          • 共享契约参考
          • 类型与契约目录
          • 错误模型
          • 版本兼容性
      • 附录
        • 错误码
        • 术语表
        • 常见问题
  1. 基础概念

平台架构

这一页解释插件从源码到运行经历了什么,以及一次前端请求、一条异步事件和一条流程作业分别走哪条链路。遇到“插件没加载”“按钮没出现”“接口调不通”时,先判断问题落在哪一层。

全景#

下图以交警能力包为例:前端成员跑在四个宿主里,后端成员跑在插件后端运行时里,两边通过插件网关通信,底部是开发工具链。
插件化底座全景:宿主、插件网关、后端运行时与平台服务
看图记住三段:上面是宿主和你提交的界面,中间是后端运行时与能力沙箱,下面是司空自己的平台服务。
把图上的框对上工程里的文件:
前端成员:Entry(activate)提交扩展、调 ctx.apiCall;View 是 Vue 3 界面,挂在 ShadowRoot 里。
后端成员:handlers/ 是 HTTP 接口,events/ 是事件回调,adapters/ 与 workflows/ 是流程脚本和编排。
能力沙箱:store、cache、media、notify、受管出网等,都要先在清单里申报。

从源码到页面#

1.
写:前端成员写清单、入口和界面;后端成员写清单、接口/事件/流程脚本。
2.
构建:fh2-plugin build 校验清单和代码结构,生成前端 dist/、后端 dist/ 和运行时清单。
3.
安装:宿主登记插件。本地调试页面自动装载;线上由插件管理服务下发。
4.
激活:进入某个页面时,宿主为声明了该页面扩展点的前端插件创建运行环境,调用 activate(ctx)。
5.
呈现:入口提交扩展(按钮、面板、表单块等),宿主挂到预留位置;View 此时才真正运行。
6.
调用:前端入口通过 ctx.apiCall 调后端;后端按 pluginId + handler 找到脚本执行。
同一个前端插件在多个宿主各自激活,入口实例不共享内存变量。短期协作用同插件的跨宿主服务,持久化数据放后端。

三条链路#

1. 一次 HTTP 请求#

用户操作
  → View 调用契约方法
  → Entry 执行 ctx.apiCall('/plugin/invoke', { pluginId, handler, input })
  → 插件网关补鉴权、加 /plugin-api 前缀、路由到后端
  → handler 校验输入、读写 store、调用其他能力
  → 返回 { code, message, data }
  → Entry 更新状态,View 重新渲染
失败时 ctx.apiCall 抛 PluginError,不是返回一个失败信封;业务码在 detail.gatewayCode。前端必须捕获并显示可重试或降级状态,不能吞成成功。

2. 一条事件#

平台消息(媒体生成、状态变化等)
  → 后端 events[] 匹配
  → 事件回调校验幂等键
  → 写 store / 启动流程 / 调 connector
  → notify 或前端轮询
  → 前端更新
事件是至少一次投递,消费脚本必须幂等。事件不缓存、不重放;订阅之前发生的事件收不到。

3. 一条流程作业#

触发器(api / schedule / stream / bizNotify / job)
  → 流程步骤和 needs 依赖
  → run_script 调用业务功能,或平台受控步执行高风险动作
  → 等待信号 / 超时 / 重试
  → 流程状态和执行历史
下发任务、返航等高风险动作用平台受控步,不向脚本注入飞行函数。流程执行、队列和重试必须在目标环境验证;本地画布和快速预检不执行真实流程。

运行边界#

边界前端后端
运行环境宿主页面中的独立 Entry 环境 + 同 Realm View服务端 Worker 同步脚本沙箱
网络入口走 ctx.apiCall / ctx.ws;View 不接收上下文能力按 allowlist 注入;出网走 connector.fetch
权限清单 permissions + capabilities.get() 判空清单 allowlist;未申报对象不存在
隔离ShadowRoot 隔离 UI/CSS,不是 JS 沙箱同步沙箱、无 Node 内置模块、无动态执行
生命周期宿主激活/卸载,资源由平台回收插件版本装载、流程实例和脚本执行
安装审核与代码审核是安全边界;不要用 ShadowRoot 或本地构建成功代替安全审查。

后端部分在哪里运行#

带后端的插件,脚本运行在插件后端运行时里,不在浏览器里。前端 ctx.apiCall 把请求经插件网关送到后端,后端按 {pluginId, handler} 找到对应脚本执行。细节见后端插件的结构和后端能力总览。

验证你理解了#

不同插件 A 和 B 能通过插件服务互相调用吗?不能;服务按插件 ID 隔离。
同一插件在项目和驾驶舱的入口能共享内存变量吗?不能;短期协作用服务,持久化用后端。
为什么 View 拿不到入口的 PluginContext?这是 API 分工,不是 JavaScript 沙箱保证。
本地 HTTP 模拟器通过,能证明生产网关和数据库可用吗?不能;目标环境另验。
修改于 2026-10-26 15:55:40
上一页
什么是插件开发
下一页
前端宿主、扩展点与能力
Built with