公众号 H5 按钮写着“返回”,实现前却要先说清楚目标:后退一页、关闭当前网页,还是打开指定页面。它们不是同一个动作,关闭网页后的落点也不由一个业务 URL 精确控制。
当年的需求与尝试
2018 年项目希望从公众号打开的 H5 页面“回到公众号首页”。history.back 和 window.close 都未达到预期。后来尝试 wx.closeWindow,旧工程中没有成功,最后使用了以下桥接调用:
WeixinJSBridge.invoke("closeWindow", {}, function (result) {
// 按实际客户端结果处理,不在这里推断订单或登录状态
});
这是当时成功关闭页面的历史片段,缺少完整 SDK 初始化及客户端版本,不能当作所有环境的现成接入代码。
为什么三个动作要分别处理
| 动作 | 控制的对象 |
|---|---|
| history.back | 当前浏览上下文的历史记录 |
| 关闭 H5 | 承载网页的容器或窗口 |
| 跳转业务页 | 明确的目标 URL |
如果页面没有预期的历史记录,back 不一定产生业务上想要的导航。普通 window.close 也受浏览器窗口关闭规则限制。History.back、Window.close
关掉 H5 以后,用户看到会话、上层页面还是其他入口,与进入方式和客户端页面栈相关。不能把“关闭成功”命名为“打开公众号指定首页”。
wx 方法不可用时先检查接入条件
旧工程中 wx 开头的方法失败,不足以证明官方接口失效;应先看 SDK 是否加载、签名配置是否针对当前页面、是否进入 ready,以及当前环境是否支持该能力。正式接入以微信 JS-SDK 文档为准。
原记录还从一次控制台提示推断某种 call 写法不再支持,这不足以宣布平台全局停用。底层桥接片段可以解释历史经历,当前产品仍应按公开接口及对应条件接入。
验证要覆盖不同进入路径和非微信环境;对于必须去往确定位置的业务流程,使用明确业务页面导航,并单独处理关窗能力不可用时的提示。