diff --git a/index.html b/index.html index 399fa30..920befb 100644 --- a/index.html +++ b/index.html @@ -99,7 +99,7 @@ /* ============================================================ ① 页面版本号(YYMMDD + 两位序号)—— 用于排查 webview 是否缓存了旧页面 ============================================================ */ - var VER = 26090810; + var VER = 26090901; var verNoEl = el('verNo'); if (verNoEl) verNoEl.textContent = VER; @@ -174,22 +174,43 @@ dbg('navigator.userAgent 含 MicroMessenger: ' + (/MicroMessenger/i.test(navigator.userAgent) ? '✅ 是' : '❌ 否'), 'muted'); dbg('location.hash = ' + (location.hash || '(空)') + ' location.search = ' + (location.search || '(空)'), 'muted'); - // 给 navigateTo 打补丁:记录每一次跳转调用 + 捕获异常 + // 给 navigateTo 打补丁:记录每一次跳转调用 + 捕获异常 + 转发 fail/success + // (navigateTo 跳不存在的页面 / 页面栈超 10 层时是静默失败,必须靠 fail 才能看到原因) if (window.wx && window.wx.miniProgram && window.wx.miniProgram.navigateTo) { var _nav = window.wx.miniProgram.navigateTo.bind(window.wx.miniProgram); window.wx.miniProgram.navigateTo = function (o) { - dbg('navigateTo 调用 → ' + (o && o.url), 'ok'); - try { _nav(o); dbg('navigateTo 已执行', 'ok'); } + var opt = o || {}; + dbg('navigateTo 调用 → ' + opt.url, 'ok'); + var _fail = opt.fail, _succ = opt.success; + opt.fail = function (err) { + dbgErr('navigateTo fail: ' + ((err && err.errMsg) || '未知原因')); + if (_fail) { try { _fail(err); } catch (e) {} } + }; + opt.success = function (res) { + dbg('navigateTo success', 'ok'); + if (_succ) { try { _succ(res); } catch (e) {} } + }; + try { _nav(opt); dbg('navigateTo 已调用(结果见 success/fail)', 'ok'); } catch (ex) { dbgErr('navigateTo 抛异常: ' + (ex && ex.message ? ex.message : ex)); } }; } - // 给 switchTab 打补丁:记录每一次跳转调用 + 捕获异常 + // 给 switchTab 打补丁:记录每一次跳转调用 + 捕获异常 + 转发 fail/success if (window.wx && window.wx.miniProgram && window.wx.miniProgram.switchTab) { var _st = window.wx.miniProgram.switchTab.bind(window.wx.miniProgram); window.wx.miniProgram.switchTab = function (o) { - dbg('switchTab 调用 → ' + (o && o.url), 'ok'); - try { _st(o); dbg('switchTab 已执行', 'ok'); } + var opt = o || {}; + dbg('switchTab 调用 → ' + opt.url, 'ok'); + var _fail = opt.fail, _succ = opt.success; + opt.fail = function (err) { + dbgErr('switchTab fail: ' + ((err && err.errMsg) || '未知原因')); + if (_fail) { try { _fail(err); } catch (e) {} } + }; + opt.success = function (res) { + dbg('switchTab success', 'ok'); + if (_succ) { try { _succ(res); } catch (e) {} } + }; + try { _st(opt); dbg('switchTab 已调用(结果见 success/fail)', 'ok'); } catch (ex) { dbgErr('switchTab 抛异常: ' + (ex && ex.message ? ex.message : ex)); } }; } @@ -228,6 +249,7 @@ var envTxt = a.inWebview ? '小程序 web-view' : (a.MODE === 'wechat-browser' ? '微信浏览器' : '纯浏览器'); dbg('init 回调: envTxt=' + envTxt + ' MODE=' + a.MODE + ' inWebview=' + a.inWebview, 'ok'); el('envTxt').textContent = envTxt; + show(a.inWebview ? 'ok' : 'no', envTxt); // 修:之前 show() 从未被调用,标签永远停在初始「纯浏览器」 el('envHint').style.display = a.inWebview ? 'none' : 'block'; render(a); });