diff --git a/js/app.js b/js/app.js index 13b7ce8..4fee7cf 100644 --- a/js/app.js +++ b/js/app.js @@ -3,7 +3,7 @@ (function () { 'use strict'; /* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */ - var VER = '26091802'; + var VER = '26091901'; const $ = (s, c) => (c || document).querySelector(s); const $$ = (s, c) => Array.from((c || document).querySelectorAll(s)); @@ -4577,7 +4577,13 @@ window.wx.miniProgram.getEnv(function (r) { responded = true; if (r && r.miniprogram) { - window.wx.miniProgram.navigateTo({ url: '/pages/annex/auth/index' }); + /* 带上 backUrl(当前地址)→ 授权页写进 __AUTH_RESULT__ → 宿主优先按它 + 回传:从哪个 H5 触发的授权就回到哪个 H5(不赌 postMessage 派发时机)。 */ + var u = '/pages/annex/auth/index'; + try { + u += '?backUrl=' + encodeURIComponent(location.href); + } catch (e) {} + window.wx.miniProgram.navigateTo({ url: u }); } else { toast('请在小程序中完成授权登录'); } diff --git a/js/wx-auth.js b/js/wx-auth.js index d741d6f..0374a42 100644 --- a/js/wx-auth.js +++ b/js/wx-auth.js @@ -69,8 +69,20 @@ requestProfile: function (authPage) { var self = this; function nav() { + /* 把「发起授权的当前 H5 地址」经 navigateTo query 带给授权页(backUrl)—— + 与 openid 同一条可靠通道(navigateTo onLoad 必达),不依赖 postMessage + (微信只在后退/销毁/分享时批量派发,时序不可靠:宫格 location.href 换应用后, + 宿主记的 shareHref 可能还是上一个应用的地址,授权结果被送回错的地方)。 + 授权页把 backUrl 写进 __AUTH_RESULT__,宿主 onShow 优先用它做回传基址: + 从哪个 H5 触发的授权,授权后就回到哪个 H5。 */ + var url = authPage || '/pages/annex/auth/index'; + var backUrl = ''; + try { backUrl = location.href; } catch (e) {} + if (backUrl) { + url += (url.indexOf('?') !== -1 ? '&' : '?') + 'backUrl=' + encodeURIComponent(backUrl); + } window.wx.miniProgram.navigateTo({ - url: authPage || '/pages/annex/auth/index', + url: url, /* 页面不存在 / 页面栈超限(>10层) 时 navigateTo 是静默失败 —— 必须自己兜住并提示, 否则用户只看到「正在打开授权页…」后再无反应,无从排查。 */ fail: function (err) {