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. 前端

前端能力目录

能力是宿主提供给插件调用的功能:画地图标记、读遥测、控制云台……每个能力有一个 ID,同时就是权限名——在清单 permissions 里声明后才能用。目录封闭,以本页表格为准。

用法#

// 1. 清单 permissions 声明 → 2. 获取 → 3. 判空 → 4. 调用
const map = await ctx.capabilities.get('platform:map')
if (!map) {
  ctx.logger.warn('当前宿主未提供地图能力')
  return
}
const marker = await map.addMarker({position: {lng: 113.9, lat: 22.5, height: 0}, label: '目标'})
await marker.dispose()   // 主动释放;插件停用时平台也会统一回收
get() 返回 undefined 的三种原因:权限没声明、当前宿主没提供该能力、运行环境不满足要求(如同源限制)。要按「能力缺失」降级处理,不要当网络错误重试。

能力可以组合成完整业务闭环#

能力不是一张孤立的 API 清单。以变道抓拍为例,同一个插件按下面的顺序把驾驶舱能力接成业务链:
阶段能力 / 接口在变道抓拍中的用途
运行门控cockpit:context、cockpit:telemetry校验项目、机场 SN、航次,以及载荷控制权、飞行模式和设备状态
识别准备cockpit:ai-config开启 dji-visible 和 vehicle 目标类型,配置未确认就不开始抓拍
画布标注cockpit.ui.live-overlay、cockpit:live-pointer、cockpit:scene-geometry在直播画面上自绘实线/导流区;绘制时接管指针;把画面点反投到地面锚定
逐帧检测cockpit:detectiononFrame() 消费 AI 检测帧;用 frameId 把地面标注投回当前帧,再把目标 bbox 和标线交给插件自己的规则
取证cockpit:camera、ctx.blobs命中后用 captureFrame() 截当前直播帧,叠加标线与涉事车辆 bbox 后存为证据
记录与提示ctx.apiCall、platform:notification用稳定 event_key 建事件、去重;刷新记录并通过通知提示用户
关键点是:压线/进入规则由插件自己算,宿主只提供状态、画面和逐帧检测。 cockpit:detection 给的是带 capturedAt(AI SEI 时间)和归一化 bbox 的检测帧,不是“已经判好的违章事件”。插件可以在这份结果上做几何判断、截帧、叠绘和上报,也可以只把其中一部分能力用在别的业务里。
变道抓拍在直播画布上绘制实线,并在同一画面读取 AI 检测框
黄色实线与白色顶点是插件通过 live-overlay 自绘并锚定到地面的标注;绿色框和车辆 ID 是驾驶舱原生 AI 检测显示,插件通过 cockpit:detection 读取同一路帧。扩展点只是容器,业务判断发生在插件入口里。
完整的运行时链路和截图见交通抓拍。

目录#

「可用宿主」是平台登记的提供方;插件仍需处理 get() 返回 undefined(未声明权限、宿主未接线、环境不满足都会出现)。
ID / 权限名获取方式限制可用宿主方法
platform:httpctx.apiCall—全部宿主call
platform:eventsctx.events—全部宿主on
platform:websocketctx.ws—全部宿主onBizCode
platform:storagectx.storage / ctx.blobs—全部宿主blobs、local、session
platform:navigationctx.capabilities.get('platform:navigation')—驾驶舱、项目、消息back、open
platform:locationctx.capabilities.get('platform:location')—驾驶舱、项目getState、onStateChanged
platform:wpmzctx.capabilities.get('platform:wpmz')—全部宿主parseCoordinates、rewrite
platform:audioctx.capabilities.get('platform:audio')—全部宿主createPlayer
platform:clipboardctx.capabilities.get('platform:clipboard')—全部宿主writeText
platform:notificationctx.capabilities.get('platform:notification')—驾驶舱、项目、消息show
platform:dialogctx.capabilities.get('platform:dialog')—全部宿主open
platform:mapctx.capabilities.get('platform:map')—全部宿主addBillboard、addLabel、addMarker、addPolygon、addPolyline、onClick、onHover、recenter、registerContextMenuItem
platform:wayline-previewctx.capabilities.get('platform:wayline-preview')—全部宿主show
platform:object-uploadctx.capabilities.get('platform:object-upload')同源页面驾驶舱upload
platform:devicesctx.capabilities.get('platform:devices')—全部宿主getProjectDevices
cockpit:contextctx.capabilities.get('cockpit:context')—驾驶舱getState、onStateChanged
cockpit:cameractx.capabilities.get('cockpit:camera')—驾驶舱acquireRecording、boundingZoom、captureFrame、ensureMode、ensureZoom、getState、onStateChanged、switchLens、takePhoto
cockpit:telemetryctx.capabilities.get('cockpit:telemetry')—驾驶舱getState、onStateChanged
cockpit:detectionctx.capabilities.get('cockpit:detection')—驾驶舱onFrame、projectFromGround、projectToGround
cockpit:ai-configctx.capabilities.get('cockpit:ai-config')—驾驶舱ensure、getState、onStateChanged
cockpit:scene-geometryctx.capabilities.get('cockpit:scene-geometry')—驾驶舱projectGeoToVideo、projectSnapshotGeoToVideo、projectSnapshotVideoToGround、projectVideoToGround、releaseSnapshot
cockpit:live-pointerctx.capabilities.get('cockpit:live-pointer')—驾驶舱acquire
cockpit:flight-controlctx.capabilities.get('cockpit:flight-control')—驾驶舱acquireControl、emergencyStop、flyTo、releaseControl、returnHome、returnHomeCancel
cockpit:gimbalctx.capabilities.get('cockpit:gimbal')—驾驶舱lookAt、reset
cockpit:hotkeysctx.capabilities.get('cockpit:hotkeys')—驾驶舱register
cockpit:smart-trackctx.capabilities.get('cockpit:smart-track')—驾驶舱getState、onStateChanged、start、stop
cockpit:flight-taskctx.capabilities.get('cockpit:flight-task')—驾驶舱cancelInFlightWayline、getState、onStateChanged、startInFlightWayline
project:contextctx.capabilities.get('project:context')—项目getState、onStateChanged
plan:form-contextctx.capabilities.get('plan:form-context')—计划getState、onStateChanged

默认值与注意点#

项说明
camera.captureFrame()requireGeometry 默认 true(无几何信息时不拍)
notification.show() 的 durationMs无 SDK 默认值,由宿主决定
地图 clampToGround缺省 false
音频 source支持 preset、绝对/受控 URL 或插件内 ./ 资源
platform:devices未知机型返回 model.id: 'unknown',缺角色为 null;不要猜测设备关系
能力「可用」≠ 操作成功飞控、设备类操作还要检查控制权、机型与链路;accepted 只是受理

常见问题#

现象原因与处理
get() 一直返回 undefined清单 permissions 没声明,或当前宿主确实没提供(对照上表提供方列)
用 ctx.capabilities.get('platform:map') 报错或拿不到platform:http/events/websocket/storage 是内建能力,不在 get() 范围内,直接用 ctx 顶层成员
get() 成功但命令没生效能力可用不代表设备最终执行成功;查询权威状态确认
报 CAPABILITY_NOT_AVAILABLE权限或运行环境不满足;修正声明或降级
修改于 2026-10-26 15:55:53
上一页
前端扩展点目录
下一页
前端平台事件目录
Built with