/* 11-07 用户:「在孕妈广场、笔记页或任何一个子页面,在小程序上刷新,刷新结束之后它会回到首页」。 原因:小程序刷新 / 重新进入只会加载首页地址;首页只恢复 App 表里的 H5 应用(last_app),首页自己的子页面不在表里。 做法:首页仓里的子页面(孕妈广场、笔记、我的投稿、测一测、专题页、计算器)一打开就把当前地址记在本机 localStorage「mmbox.lastsub.v1」= {u: 不带身份的路径+查询, h: 首页目录, at};页面里换笔记 / 换话题(pushState / replaceState)也跟着记。 首页被宿主重新加载时(没有 referrer、不是后退)按它回到这一页,逻辑在 app.js resumeSub()。 从别的应用后退回到子页面时,顺手清掉 last_app(同首页 clearLastAppOnBackHome),免得刷新被送回那个应用。 */ (function () { var K = 'mmbox.lastsub.v1'; var me = document.currentScript && document.currentScript.src; var home = me ? new URL('../', me).pathname : ''; if (!home) return; var DROP = /^(openid|unionid|t|_v|phone|nickname|avatar|__no_identity)$/; function save() { try { var q = new URLSearchParams(location.search), k = []; q.forEach(function (v, n) { if (DROP.test(n)) k.push(n); }); k.forEach(function (n) { q.delete(n); }); var s = q.toString(); localStorage.setItem(K, JSON.stringify({ u: location.pathname + (s ? '?' + s : ''), h: home, at: Date.now() })); } catch (e) {} } save(); ['pushState', 'replaceState'].forEach(function (fn) { var o = history[fn]; if (typeof o !== 'function') return; history[fn] = function () { var r = o.apply(this, arguments); setTimeout(save, 0); return r; }; }); addEventListener('popstate', save); addEventListener('pageshow', function (e) { if (e.persisted) save(); }); /* 从别的应用后退回来 → 清 last_app */ try { var nav = performance.getEntriesByType && performance.getEntriesByType('navigation')[0]; var ref = document.referrer || ''; var back = (nav && nav.type === 'back_forward') || (ref.indexOf(location.origin + '/') === 0 && ref.indexOf('/mama-box') < 0); var m = ((location.hash || '') + '&' + (location.search || '')).match(/[#?&]openid=([^&#?]*)/); if (back && m && window.fetch) fetch('/api/mp/public/last-app?openid=' + m[1], { method: 'DELETE', keepalive: true }).catch(function () {}); } catch (e) {} })();