Phase 6/7 stub:SwitchOverGameData + OpenurlTitleData

补齐 H5 桥 §3.1 [15][17]两个 stub handler,让 H5 调子游戏切换 / 弹层
入口时不再报 "no handler registered",避免业务流程卡住。完整流程留
Phase 6 / Phase 7 实施。

新增:
  - Source/Bridge/Handlers/SwitchOverGameHandler.swift §3.1 [17]stub
    cb "SwitchOverGameData"(驼峰首字母大写沿用 msext 字面)
    完整实现需 AppCoordinator + SubGameViewController + SubGameDownloader
    (Phase 6.4 落地)
  - Source/Bridge/Handlers/OpenurlTitleDataHandler.swift §3.1 [15]stub
    cb "OpenurlTitleData"
    完整实现需 OverlayViewController + window.settings polyfill + 3s 节流
    (Phase 7 落地);注意契约硬约束 "title " 末尾空格已在注释提示

WebContainer.registerBridgeHandlers 接入。

至此 H5 桥 §3.1 大厅可调的全部 16 项 handler(除 backgameData / createRoom
等子游戏专属 §H 4 项)都已注册(含完整实现 / stub 两种状态),
H5 启动 / 业务期任何 handler 调用都不会报 "no handler"。

BuildProject 通过

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
joywayer
2026-06-22 20:14:31 +08:00
co-authored by Claude Opus 4.7
parent 39c1b5164d
commit 68cf7140d7
3 changed files with 60 additions and 2 deletions
@@ -0,0 +1,28 @@
//
// OpenurlTitleDataHandler.swift
// ylgamehall
//
// H5 Native handler stubOpenurlTitleData WebView threeView
// docs/H5-Native-Contract.md §3.1 15
//
// Phase 7 OverlayViewController + window.settings polyfill
// + 3 stub cb H5 "no handler"
//
// key "title " msext
// obj["title "]?.asString obj["title"]?.asString
//
import Foundation
public enum OpenurlTitleDataHandler {
public static func register(on bridge: any BridgeProtocol) {
// 15OpenurlTitleData
// url / "title " / data / orientation
// cb: "OpenurlTitleData"
// push OverlayViewController + 3 first_Time
bridge.register("OpenurlTitleData") { _, callback in
callback?(.string("OpenurlTitleData"))
}
}
}
@@ -0,0 +1,26 @@
//
// SwitchOverGameHandler.swift
// ylgamehall
//
// H5 Native handler stubSwitchOverGameData
// docs/H5-Native-Contract.md §3.1 17
//
// Phase 6.4 AppCoordinator + SubGameViewController +
// SubGameDownloader zip stub cb
// H5 "no handler"
//
import Foundation
public enum SwitchOverGameHandler {
public static func register(on bridge: any BridgeProtocol) {
// 17SwitchOverGameData
// type / Gamedirectory / gamedownloadurl / data
// cb: "SwitchOverGameData"沿 msext
// push SubGameViewController + zip + H5
bridge.register("SwitchOverGameData") { _, callback in
callback?(.string("SwitchOverGameData"))
}
}
}
@@ -73,8 +73,12 @@ public final class WebContainerViewController: UIViewController {
RemoteAudioHandler.register(on: bridge) // §3.1 45Phase 3.B/3.C/3.D stub RemoteAudioHandler.register(on: bridge) // §3.1 45Phase 3.B/3.C/3.D stub
// Phase 4.A + stubPhase 4.B SDK / Phase 4.C QQ URL Scheme // Phase 4.A + stubPhase 4.B SDK / Phase 4.C QQ URL Scheme
AccreditLoginHandler.register(on: bridge) // §3.1 1Phase 4.B AccreditLoginHandler.register(on: bridge) // §3.1 1Phase 4.E SDK
FriendsShareHandler.register(on: bridge) // §3.1 2Phase 4.B/4.C FriendsShareHandler.register(on: bridge) // §3.1 2Phase 4.B QQ/ 4.C/4.D
// Phase 6.4 / 7 + stub H5 "no handler"
SwitchOverGameHandler.register(on: bridge) // §3.1 17Phase 6
OpenurlTitleDataHandler.register(on: bridge) // §3.1 15Phase 7
} }
// MARK: - // MARK: -