浏览器返回协议
这是可选的父页面与游戏iframe消息协议,不影响通过launch_url启动游戏。所有消息包含channel为api-client.navigation、version为1及instanceId。
- Loader向直接父窗口发送hello,携带随机instanceId,不含凭据。
- 父页面可回复capabilities,声明returnToPlatform为true,原样携带instanceId。
- 游戏请求返回时发送request-return及requestId。
- 父页面接受处理后回复return-accepted,原样携带requestId。未收到确认时Loader会撤销返回能力。
父页面必须同时校验event.source等于当前iframe.contentWindow、event.origin等于启动URL的origin,以及当前instanceId。重新挂载时清理旧实例。接受返回不表示玩家已经退出或钱包关闭,是否调用kick由平台的明确退出动作决定。
request-return可以携带confirmed:true,表示游戏错误窗口中用户已明确确认返回;父页面可直接关闭当前游戏窗口并刷新钱包,避免重复确认。普通请求仍按平台自己的确认流程处理。
capabilities可另声明loaderReady:true,Loader初始化可接管加载提示后发送ready。父页面在验证来源后移除外层加载提示。ready不代表子游戏资源、登录或对局恢复完成;iframe的load也不能证明业务就绪。超时保留返回或重新获取入口的操作。
协议channel名称是公开契约,磁盘目录改为provider/client后仍保持不变。
消息示例
以下为 postMessage 的对象,不是 HTTP API。所有消息均带 channel、version、type、instanceId;返回请求和确认额外带 requestId,字符串应原样回传。
{
"channel": "api-client.navigation",
"version": 1,
"type": "hello",
"instanceId": "INSTANCE_ID"
}
{
"channel": "api-client.navigation",
"version": 1,
"type": "capabilities",
"instanceId": "INSTANCE_ID",
"returnToPlatform": true,
"loaderReady": true
}
| type | 方向 | 附加字段/处理 |
|---|---|---|
| hello | iframe → 父页面 | 保存当前 instanceId,并声明支持的能力 |
| capabilities | 父页面 → iframe | returnToPlatform、loaderReady 为可选 boolean |
| ready | iframe → 父页面 | 移除外层加载提示;不是登录完成通知 |
| request-return | iframe → 父页面 | requestId 字符串,confirmed 可选 boolean |
| return-accepted | 父页面 → iframe | 原样回传 requestId;只表示接受界面返回请求 |
发送消息的 targetOrigin 必须使用已校验的游戏 origin,不使用 *。本协议不传 secret、API token 或账务余额。