بنقرة واحدة
xxf-webview
使用 XXFWebView 的 Bridge 做 Web 与 Native 双向通信。当用户要在 H5 与 iOS 之间发消息、发请求、注册处理器、约定事件协议,或询问“bridge 怎么接”时使用。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
使用 XXFWebView 的 Bridge 做 Web 与 Native 双向通信。当用户要在 H5 与 iOS 之间发消息、发请求、注册处理器、约定事件协议,或询问“bridge 怎么接”时使用。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
创建 XXF iOS 列表页模板(DiffableDataSource + BaseCollectionViewCell + StatefulView + 分页 ViewModel)
规范 ViewController 与 ViewModel 的分区组织方式。用于治理成员变量和方法过多、顺序混乱、阅读成本高的问题;通过 MARK 分区和职责分层保持代码导航清晰。
处理 XXF iOS 项目中的通用编码任务交付流程。用于 bugfix、功能开发、重构、回归修复等未显式指明测试或 review 的日常 coding 请求;负责自动串起模块 skill、补测、验证、代码审查与风险门禁。
iOS 性能门禁与主动鉴别。针对常规 coding 改动自动识别性能风险(主线程阻塞、列表卡顿、内存抖动、启动耗时、无效并发、过度渲染),并执行最小可行验证与门禁结论,不依赖用户额外提示。
Vibe Coding 通用治理闭环。用于把模糊需求转成可验证交付:先定义问题与边界,再走拼好码优先、最小改动、硬门禁验证、证据化交付和风险结论。适用于需求澄清、实现前规划、AI 协作治理、质量门禁落地。
XXFViewModel MVVM 的 VM 基类与生命周期。当用户要写 ViewModel、绑定 View、处理输入输出流,或询问"XXF 的 MVVM 怎么用"时使用。若出现 ViewModel 成员或方法膨胀、顺序混乱,应联动 `xxf-aaa-class-declaration-guidelines` 做分区治理。
| name | xxf-webview |
| description | 使用 XXFWebView 的 Bridge 做 Web 与 Native 双向通信。当用户要在 H5 与 iOS 之间发消息、发请求、注册处理器、约定事件协议,或询问“bridge 怎么接”时使用。 |
| allowed-tools | Read, Glob, Grep, Edit, Write |
handleWebEvent:H5 -> Native 调用入口
bridge.call('handleWebEvent', request, callback) 发给 NativeWebEventInterface 中暴露该异步方法并分发到 onWebEvent / eventHandlerRegistrynativeEvent:Native -> H5 调用入口
BridgeWebView.postEvent(...) 调 H5 的 nativeEventdsBridge.registerAsyn('nativeEvent', handler) 接收并回包Glob Sources/XXFWebView/**/*.swift
Grep "Bridge|WebEvent|Handler|request|response|direction" in Sources/XXFWebView/
重点文件通常包括:
Sources/XXFWebView/Bridge/BridgeWebView.swiftSources/XXFWebView/Bridge/WebEventInterface.swiftSources/XXFWebView/Bridge/Model/WebEventRequest.swiftSources/XXFWebView/Bridge/Model/WebEventResponse.swiftSources/XXFWebView/Bridge/Model/WebEventDirection.swiftSources/XXFWebView/Bridge/Handler/WebEventHandler*.swift不要凭记忆输出签名,先以当前仓库代码为准。
requestId 字段;如业务需要请求-响应关联,请在 data 中自行携带(例如 data.requestId)WebEventDirection 给 event 加前缀):
nativeToWeb:Native 发给 H5webToNative:H5 发给 Nativeunknown:兜底,不参与正常业务分发nativeEvent)let request = WebEventRequest(
name: "nativeMessage",
direction: .nativeToWeb,
data: ["text": "hello from native"]
)
bridgeWebView.postEvent(
request,
expecting: WebEventResponse<AnyCodable>.self
) { result in
// 处理 H5 回包
}
要点:
postEvent 内部固定调用 channel:nativeEventevent 最终会是带前缀的字符串(如 ntw:nativeMessage)evaluateJavaScript 拼桥接调用handleWebEvent)bridgeWebView.onWebEvent = { request, callback in
// request.event / request.data
callback(.success(data: AnyCodable(["reply": "native received"])))
}
或使用 eventHandlerRegistry 做按事件名分发。
handleWebEvent)const request = {
// 推荐与 Native 统一:带方向前缀(wtn:)
// 若历史包袱使用裸事件名(webMessage),Native 侧需兼容两种写法
event: "wtn:webMessage",
data: { text: "hello from h5" }
}
bridge.call("handleWebEvent", request, function(response) {
// response: { code, message, data }
})
nativeEvent)dsBridge.registerAsyn("nativeEvent", function(request, callback) {
// request: { event, data },event 可能带 ntw: 前缀
callback({
code: 200,
message: "h5 received",
data: { ok: true }
})
})
onWebEvent:单入口直接处理(优先级高)eventHandlerRegistry:按事件名分发(onWebEvent 未设置时生效)WKWebView.evaluateJavaScript 代替 BridgeXxxBridgeEvents.swift:事件名与 payload key 常量XxxWebEventHandler.swift:按能力拆分 handler(登录、路由、设备能力)BridgeDebugLogger.swift:统一收发日志与耗时埋点