v26110605 退出登录后只看不写:js/login-gate.js(首页/广场/专题页共用),首页按访客显示,记录/评论/点赞/收藏/投稿/兑换/改档案弹登录提示;退出确认文案更新
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<!-- 11-04 UGC 总开关关着时本页不展示,直接回首页(js/ugc.js) -->
|
<!-- 11-04 UGC 总开关关着时本页不展示,直接回首页(js/ugc.js) -->
|
||||||
|
<script src="../js/login-gate.js?v=26110605"></script>
|
||||||
<script src="../js/ugc.js?v=26110464" data-guard></script>
|
<script src="../js/ugc.js?v=26110464" data-guard></script>
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
|
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover">
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
@@ -958,7 +959,7 @@ html.night .gtg button.on{background:#F2725B;border-color:#F2725B;color:#fff}
|
|||||||
return m ? decodeURIComponent(m[1]).split('?')[0] : '';
|
return m ? decodeURIComponent(m[1]).split('?')[0] : '';
|
||||||
} catch (e) { return ''; }
|
} catch (e) { return ''; }
|
||||||
}
|
}
|
||||||
var OPENID = param('openid');
|
var OPENID = (window.mbGate && window.mbGate.out) ? '' : param('openid'); /* 11-07 退出登录后按访客(不拉「我的评论」、不认头像) */
|
||||||
var MYNAME = param('nickname') || '孕妈'; /* 授权回填的昵称在 hash 里;没有就叫「孕妈」,后面另挂「我」标 */
|
var MYNAME = param('nickname') || '孕妈'; /* 授权回填的昵称在 hash 里;没有就叫「孕妈」,后面另挂「我」标 */
|
||||||
|
|
||||||
/* ---------- 头像:沿用首页 assets/img/mom/ 写实头像 ---------- */
|
/* ---------- 头像:沿用首页 assets/img/mom/ 写实头像 ---------- */
|
||||||
|
|||||||
@@ -9,15 +9,16 @@
|
|||||||
<title>兜爸心选 · 孕育陪伴</title>
|
<title>兜爸心选 · 孕育陪伴</title>
|
||||||
<!-- 11-04 UGC 总开关(孕妈广场 + 测一测,后台 /box_bm/plaza 顶部切换),见 js/ugc.js -->
|
<!-- 11-04 UGC 总开关(孕妈广场 + 测一测,后台 /box_bm/plaza 顶部切换),见 js/ugc.js -->
|
||||||
<script src="js/ugc.js?v=26110487"></script>
|
<script src="js/ugc.js?v=26110487"></script>
|
||||||
<!-- V:26110604 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
|
<!-- V:26110605 缓存版本标记:改 css/js 时同步 bump 该值(与 js/app.js 的 VER 同源),静态资源按 mtime 走 ETag 自动刷新 -->
|
||||||
<link rel="stylesheet" href="mama-box.css">
|
<link rel="stylesheet" href="mama-box.css">
|
||||||
<link rel="stylesheet" href="night.css?v=26110604">
|
<link rel="stylesheet" href="night.css?v=26110605">
|
||||||
<!-- 11-04 用户:「顶部图片上的倒计时先删除掉」→ 不加载 hero-cd.css / hero-cd.js(文件留着,加回这两行即恢复),头图回到原样式 -->
|
<!-- 11-04 用户:「顶部图片上的倒计时先删除掉」→ 不加载 hero-cd.css / hero-cd.js(文件留着,加回这两行即恢复),头图回到原样式 -->
|
||||||
<!-- 夜晚模式:首屏绘制前就按上次的选择加 class,避免先白后黑闪一下(开关在首页右上角 #nightBtn,逻辑见 app.js) -->
|
<!-- 夜晚模式:首屏绘制前就按上次的选择加 class,避免先白后黑闪一下(开关在首页右上角 #nightBtn,逻辑见 app.js) -->
|
||||||
<script>try{if(localStorage.getItem('mmbox.night.v1')==='1'){document.documentElement.classList.add('night');document.querySelector('meta[name=theme-color]').content='#2A2340'}}catch(e){}</script>
|
<script>try{if(localStorage.getItem('mmbox.night.v1')==='1'){document.documentElement.classList.add('night');document.querySelector('meta[name=theme-color]').content='#2A2340'}}catch(e){}</script>
|
||||||
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
|
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
|
||||||
<!-- 共享助手:授权/跳商城/位置上报(分享卡片同步,见 docs/h5-auth-standard.md 第四节) -->
|
<!-- 共享助手:授权/跳商城/位置上报(分享卡片同步,见 docs/h5-auth-standard.md 第四节) -->
|
||||||
<script src="/common/wx-auth.js?v=26102601"></script>
|
<script src="/common/wx-auth.js?v=26102601"></script>
|
||||||
|
<script src="js/login-gate.js?v=26110605"></script>
|
||||||
<!-- 11-05 用户:「消消乐的推广 banner 图,不要有外面白色的边框」→ 去掉 .game-promo 外层白底(mama-box.css 里和其他模块共用一条白底规则,这里单独盖掉;夜间同) -->
|
<!-- 11-05 用户:「消消乐的推广 banner 图,不要有外面白色的边框」→ 去掉 .game-promo 外层白底(mama-box.css 里和其他模块共用一条白底规则,这里单独盖掉;夜间同) -->
|
||||||
<style>.game-promo,html.night .game-promo{background:none!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
|
<style>.game-promo,html.night .game-promo{background:none!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
|
||||||
/* 11-05 用户:「消消乐 banner 左右要顶到两边,跟上下模块的距离再缩小几个像素,保持协调一致」→ 去掉外层内边距:左右和其他模块一样贴满(0~屏宽),上下只留模块间统一的 16px 缝(原来多出 8px);圆角跟其他模块一致 26px;同日三改:用户嫌圆角太大 → 16px */
|
/* 11-05 用户:「消消乐 banner 左右要顶到两边,跟上下模块的距离再缩小几个像素,保持协调一致」→ 去掉外层内边距:左右和其他模块一样贴满(0~屏宽),上下只留模块间统一的 16px 缝(原来多出 8px);圆角跟其他模块一致 26px;同日三改:用户嫌圆角太大 → 16px */
|
||||||
@@ -2585,7 +2586,7 @@ html.night .rs-pan .rp-card{background:rgba(255,255,255,.06);border-color:rgba(2
|
|||||||
<!-- 2026-10-10 用户:退出登录前二次确认,写清只清授权信息、孕育数据保留 -->
|
<!-- 2026-10-10 用户:退出登录前二次确认,写清只清授权信息、孕育数据保留 -->
|
||||||
<section class="modal bx-prize lg-modal" id="modalLogout" data-autofocus="off" role="dialog" aria-modal="true" aria-labelledby="lgT">
|
<section class="modal bx-prize lg-modal" id="modalLogout" data-autofocus="off" role="dialog" aria-modal="true" aria-labelledby="lgT">
|
||||||
<h3 id="lgT">确定退出登录?</h3>
|
<h3 id="lgT">确定退出登录?</h3>
|
||||||
<p>退出后不再显示你的昵称、头像和手机号。孕期资料和各项记录仍保存在这个微信上,重新授权就能继续使用。</p>
|
<p>退出后将不显示你的孕期信息和记录,也不能记录、评论和点赞。数据会保留,重新登录即可恢复。</p>
|
||||||
<div class="modal-foot">
|
<div class="modal-foot">
|
||||||
<button class="dl-btn ghost" data-modal="close">再想想</button>
|
<button class="dl-btn ghost" data-modal="close">再想想</button>
|
||||||
<button class="dl-btn main" id="lgOk">退出登录</button>
|
<button class="dl-btn main" id="lgOk">退出登录</button>
|
||||||
@@ -2678,7 +2679,7 @@ html.night .rs-pan .rp-card{background:rgba(255,255,255,.06);border-color:rgba(2
|
|||||||
<script src="guangchang/topics.js?v=26110487"></script>
|
<script src="guangchang/topics.js?v=26110487"></script>
|
||||||
<script src="js/ava-pool.js?v=26110487"></script> <!-- 11-05 装饰头像分配表(各模块互不重复) -->
|
<script src="js/ava-pool.js?v=26110487"></script> <!-- 11-05 装饰头像分配表(各模块互不重复) -->
|
||||||
<script src="js/app.js"></script>
|
<script src="js/app.js"></script>
|
||||||
<script src="js/kit.js?v=26110604"></script>
|
<script src="js/kit.js?v=26110605"></script>
|
||||||
<!-- 11-05 用户:孕期百问加上跟趣味小测试一样的底部 Tab(孕期百问 / 记一下 / 返回首页)。挂在 #detailQA 里,面板关着时跟着滑出屏外;
|
<!-- 11-05 用户:孕期百问加上跟趣味小测试一样的底部 Tab(孕期百问 / 记一下 / 返回首页)。挂在 #detailQA 里,面板关着时跟着滑出屏外;
|
||||||
「记一下」直接开首页自己的记一下弹层(z 95 盖在百问 z 80 上),「返回首页」= 关掉百问面板 -->
|
「记一下」直接开首页自己的记一下弹层(z 95 盖在百问 z 80 上),「返回首页」= 关掉百问面板 -->
|
||||||
<script src="js/mb-tabbar.js?v=26110487"></script>
|
<script src="js/mb-tabbar.js?v=26110487"></script>
|
||||||
|
|||||||
22
js/app.js
22
js/app.js
@@ -3,7 +3,7 @@
|
|||||||
(function () {
|
(function () {
|
||||||
'use strict';
|
'use strict';
|
||||||
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
|
/* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */
|
||||||
var VER = '26110604';
|
var VER = '26110605';
|
||||||
const $ = (s, c) => (c || document).querySelector(s);
|
const $ = (s, c) => (c || document).querySelector(s);
|
||||||
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));
|
const $$ = (s, c) => Array.from((c || document).querySelectorAll(s));
|
||||||
|
|
||||||
@@ -325,8 +325,8 @@
|
|||||||
非法路由 → 页面未找到。宿主每次加载/onShow 会重新注入身份兜底;
|
非法路由 → 页面未找到。宿主每次加载/onShow 会重新注入身份兜底;
|
||||||
hash 仅保留作为「授权回传结果」(#phone/nickname/avatar)的通道。 */
|
hash 仅保留作为「授权回传结果」(#phone/nickname/avatar)的通道。 */
|
||||||
function withIdentity(url) {
|
function withIdentity(url) {
|
||||||
const oid = hashParam('openid');
|
const oid = rawParam('openid');
|
||||||
const uid = hashParam('unionid');
|
const uid = rawParam('unionid');
|
||||||
const q = [];
|
const q = [];
|
||||||
if (oid) q.push('openid=' + encodeURIComponent(oid));
|
if (oid) q.push('openid=' + encodeURIComponent(oid));
|
||||||
if (uid) q.push('unionid=' + encodeURIComponent(uid));
|
if (uid) q.push('unionid=' + encodeURIComponent(uid));
|
||||||
@@ -3809,7 +3809,14 @@
|
|||||||
⚠️ 只在「后台有值」时覆盖:后台该字段为空(未建档)就维持内置默认,不把页面
|
⚠️ 只在「后台有值」时覆盖:后台该字段为空(未建档)就维持内置默认,不把页面
|
||||||
打回白板。同样静默失败,不打断用户。
|
打回白板。同样静默失败,不打断用户。
|
||||||
⚠️ 竞态:fetch 异步,回来时 init() 已跑完,这里只需回刷那些读 state 的展示。 */
|
⚠️ 竞态:fetch 异步,回来时 init() 已跑完,这里只需回刷那些读 state 的展示。 */
|
||||||
|
/* 2026-11-07 用户:退出登录后按访客显示(js/login-gate.js 的 mbGate.out)——身份两键对页面「不存在」,
|
||||||
|
页面各处现成的访客分支自动生效(不出孕周、记录、来信……)。
|
||||||
|
跳到别的应用(withIdentity)和授权仍用真身份(rawParam):授权页要认人,其他应用由各自处理退出状态。 */
|
||||||
function hashParam(name) {
|
function hashParam(name) {
|
||||||
|
if ((name === 'openid' || name === 'unionid') && window.mbGate && window.mbGate.out) return '';
|
||||||
|
return rawParam(name);
|
||||||
|
}
|
||||||
|
function rawParam(name) {
|
||||||
/* 同时读 hash 和 query:浏览器直访(?openid=x)只有 query;
|
/* 同时读 hash 和 query:浏览器直访(?openid=x)只有 query;
|
||||||
小程序 web-view 的授权回传在 hash(微信 webview 丢 query 不丢 hash)。
|
小程序 web-view 的授权回传在 hash(微信 webview 丢 query 不丢 hash)。
|
||||||
⚠️ 先在原始串上匹配、再对捕获值 decode —— 先 decode 整串会把
|
⚠️ 先在原始串上匹配、再对捕获值 decode —— 先 decode 整串会把
|
||||||
@@ -3956,8 +3963,10 @@
|
|||||||
全部切占位/引导;宿主拿到身份后会带 openid 重载本页,届时自动切真实数据。 */
|
全部切占位/引导;宿主拿到身份后会带 openid 重载本页,届时自动切真实数据。 */
|
||||||
if (!openid) {
|
if (!openid) {
|
||||||
/* ⚠️ 可见提示(2026-09-20):宿主没注入身份时别静默装正常。
|
/* ⚠️ 可见提示(2026-09-20):宿主没注入身份时别静默装正常。
|
||||||
排查路径见 showIdNotice() 上方那段注释。 */
|
排查路径见 showIdNotice() 上方那段注释。
|
||||||
showIdNotice();
|
11-07:退出登录(mbGate.out)也走这里,但身份其实在 → 不出「未获取到微信身份」,「我的」按未登录显示 */
|
||||||
|
if (window.mbGate && window.mbGate.out) { state.authorized = false; hideIdNotice(); }
|
||||||
|
else showIdNotice();
|
||||||
state.pregEmpty = true;
|
state.pregEmpty = true;
|
||||||
state.due = null; state.week = null; state.day = null;
|
state.due = null; state.week = null; state.day = null;
|
||||||
state.babyName = ''; state.userName = '';
|
state.babyName = ''; state.userName = '';
|
||||||
@@ -6709,13 +6718,14 @@
|
|||||||
}
|
}
|
||||||
function confirmLogout() {
|
function confirmLogout() {
|
||||||
closeModal();
|
closeModal();
|
||||||
var openid = hashParam('openid');
|
var openid = rawParam('openid');
|
||||||
if (!openid) { toast('未获得身份,无法退出'); return; }
|
if (!openid) { toast('未获得身份,无法退出'); return; }
|
||||||
fetch('/api/mp/public/auth/logout?openid=' + encodeURIComponent(openid), { method: 'POST' })
|
fetch('/api/mp/public/auth/logout?openid=' + encodeURIComponent(openid), { method: 'POST' })
|
||||||
.then(function (r) { return r.json(); })
|
.then(function (r) { return r.json(); })
|
||||||
.then(function (res) {
|
.then(function (res) {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
toast('已退出登录');
|
toast('已退出登录');
|
||||||
|
if (window.mbGate) window.mbGate.set(true); /* 11-07:本机立刻记下,重载后首屏就是访客样子 */
|
||||||
setTimeout(bustReload, 600);
|
setTimeout(bustReload, 600);
|
||||||
} else {
|
} else {
|
||||||
toast(res.message || '退出失败,请重试');
|
toast(res.message || '退出失败,请重试');
|
||||||
|
|||||||
121
js/login-gate.js
Normal file
121
js/login-gate.js
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
/* 退出登录后「只看不写」(2026-11-07 用户定):
|
||||||
|
· 退出登录 ≠ 从没授权过:后端 user_auths.loggedOut 只在点了「退出登录」时置位,重新授权清掉;
|
||||||
|
从没授权过的新用户不受影响。
|
||||||
|
· 本机标记 localStorage mmbox.out.v1 = 退出时的 openid(首屏立刻知道,不等接口);
|
||||||
|
每次进页面再和服务器(auth/profile 的 loggedOut)对一次,对不上就改标记、重载一次。
|
||||||
|
· 退出后:首页按访客显示(app.js 里 hashParam 不给 openid);记录、评论、点赞、收藏、投稿、
|
||||||
|
兑换、改档案这些按钮点了弹「登录后才能使用」,去登录 = 小程序授权页(没有共享库的页面回首页「我的」)。
|
||||||
|
· 后端同样拦(box_app 返回 401 needLogin),这里只是让用户别白填。
|
||||||
|
首页 / 孕妈广场 / 专题页共用;按页面挑要拦的按钮(SEL)。 */
|
||||||
|
(function () {
|
||||||
|
if (window.mbGate) return;
|
||||||
|
var KEY = 'mmbox.out.v1', RL = 'mmbox.out.rl';
|
||||||
|
var me = document.currentScript && document.currentScript.src;
|
||||||
|
function param(n) {
|
||||||
|
var m = ((location.hash || '') + '&' + (location.search || '')).match(new RegExp('[#?&]' + n + '=([^&#?]*)'));
|
||||||
|
return m ? decodeURIComponent(m[1]) : '';
|
||||||
|
}
|
||||||
|
var O = param('openid'), out = false;
|
||||||
|
try { out = !!O && localStorage.getItem(KEY) === O; } catch (e) {}
|
||||||
|
var root = document.documentElement;
|
||||||
|
if (out) root.classList.add('mb-out');
|
||||||
|
|
||||||
|
var G = window.mbGate = {
|
||||||
|
out: out,
|
||||||
|
openid: O,
|
||||||
|
set: function (v) {
|
||||||
|
G.out = !!v;
|
||||||
|
try { if (v) localStorage.setItem(KEY, O); else localStorage.removeItem(KEY); } catch (e) {}
|
||||||
|
root.classList.toggle('mb-out', !!v);
|
||||||
|
},
|
||||||
|
login: function () {
|
||||||
|
if (window.wxAuth && window.wxAuth.requestProfile) { window.wxAuth.requestProfile(); return; }
|
||||||
|
/* 广场 / 专题页没引共享授权库:回首页「我的」,那里有「点击登录」 */
|
||||||
|
var home = me ? new URL('../', me).pathname : '../';
|
||||||
|
location.href = home + '?go=me' + location.hash;
|
||||||
|
},
|
||||||
|
/* 退出状态下拦一次操作:返回 true = 已拦 */
|
||||||
|
need: function (e) {
|
||||||
|
if (!G.out) return false;
|
||||||
|
if (e) { e.preventDefault(); e.stopPropagation(); if (e.stopImmediatePropagation) e.stopImmediatePropagation(); }
|
||||||
|
prompt();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 和服务器对一次(在别的应用重新登录过 / 在别处退出过,本机标记会过期) */
|
||||||
|
if (O) {
|
||||||
|
fetch('/api/mp/public/auth/profile?openid=' + encodeURIComponent(O))
|
||||||
|
.then(function (r) { return r.ok ? r.json() : null; })
|
||||||
|
.then(function (j) {
|
||||||
|
if (!j || j.code !== 200 || !j.result) return;
|
||||||
|
var lo = !!j.result.loggedOut;
|
||||||
|
if (lo === G.out) return;
|
||||||
|
G.set(lo);
|
||||||
|
/* 防循环:10 秒内只重载一次 */
|
||||||
|
var last = 0; try { last = +sessionStorage.getItem(RL) || 0; } catch (e) {}
|
||||||
|
if (Date.now() - last < 10000) return;
|
||||||
|
try { sessionStorage.setItem(RL, String(Date.now())); } catch (e) {}
|
||||||
|
location.reload();
|
||||||
|
})
|
||||||
|
.catch(function () {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 弹窗:自带样式,夜间模式跟着变 */
|
||||||
|
var box = null;
|
||||||
|
function prompt() {
|
||||||
|
if (!box) {
|
||||||
|
var st = document.createElement('style');
|
||||||
|
st.textContent =
|
||||||
|
'.mbg-m{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;background:rgba(40,25,30,.42);opacity:0;transition:opacity .18s}' +
|
||||||
|
'.mbg-m.on{opacity:1}' +
|
||||||
|
'.mbg-c{width:min(300px,82vw);background:#fff;border-radius:20px;padding:24px 20px 18px;text-align:center;box-shadow:0 18px 50px rgba(60,20,30,.25);font-family:inherit}' +
|
||||||
|
'.mbg-c h3{margin:0 0 8px;font-size:18px;color:#3B2A2A}' +
|
||||||
|
'.mbg-c p{margin:0 0 18px;font-size:14px;line-height:1.6;color:#8A7470}' +
|
||||||
|
'.mbg-b{display:flex;gap:10px}.mbg-b button{flex:1;height:42px;border-radius:21px;border:0;font-size:15px;font-weight:600;font-family:inherit}' +
|
||||||
|
'.mbg-x{background:#F6EEEC;color:#8A7470}.mbg-ok{background:linear-gradient(135deg,#FF8A7A,#F25F6B);color:#fff}' +
|
||||||
|
'html.night .mbg-c{background:#2D2730}html.night .mbg-c h3{color:#F4EAEF}html.night .mbg-c p{color:#B9A9AF}html.night .mbg-x{background:#3A3239;color:#C9B9BE}';
|
||||||
|
document.head.appendChild(st);
|
||||||
|
box = document.createElement('div');
|
||||||
|
box.className = 'mbg-m';
|
||||||
|
box.setAttribute('role', 'dialog');
|
||||||
|
box.setAttribute('aria-modal', 'true');
|
||||||
|
box.innerHTML = '<div class="mbg-c"><h3>登录后才能使用</h3><p>你已退出登录。登录后就能记录、评论和点赞,之前的孕期资料和记录都还在。</p>' +
|
||||||
|
'<div class="mbg-b"><button type="button" class="mbg-x">再看看</button><button type="button" class="mbg-ok">去登录</button></div></div>';
|
||||||
|
box.addEventListener('click', function (e) {
|
||||||
|
if (e.target.closest('.mbg-ok')) { hide(); G.login(); return; }
|
||||||
|
if (e.target === box || e.target.closest('.mbg-x')) hide();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!box.parentNode) document.body.appendChild(box);
|
||||||
|
box.style.display = 'flex';
|
||||||
|
requestAnimationFrame(function () { box.classList.add('on'); });
|
||||||
|
}
|
||||||
|
function hide() { if (!box) return; box.classList.remove('on'); setTimeout(function () { box.style.display = 'none'; }, 180); }
|
||||||
|
|
||||||
|
/* 要拦的按钮(各页面的写操作) */
|
||||||
|
var REC = ['taidong', 'yunqitizhong', 'yun', 'yunqixuetang', 'gongsuopinlv', 'taierguzhong', 'chanjianrili', 'bushui']
|
||||||
|
.map(function (t) { return '#htGrid .tg[data-tool="' + t + '"]'; }).join(',');
|
||||||
|
var SEL = {
|
||||||
|
home: REC + ',#vitals .vt-it,.tab-fab,.fab,.fab-w,#htEdit,.tg-add,#homeExchMod,#meExchCard,#meExchGo,#meExchOrders,#bbBanner,[data-modal="modalProfile"],[data-modal="modalWhisper"]',
|
||||||
|
plaza: '#blk,#bfv,#csend,#cpic,#cemo,#cpOk,[data-like],[data-cl],[data-rk],#cmgo,[data-write],[data-mywrite],#tabRec',
|
||||||
|
topic: '.tc-lk,.tc-go,.tc-in .pic-b,.tc-in .emo-b'
|
||||||
|
};
|
||||||
|
var IN = { plaza: '#cin', topic: '.tc-in textarea' };
|
||||||
|
function page() {
|
||||||
|
if (document.getElementById('homeBody')) return 'home';
|
||||||
|
if (document.getElementById('wf')) return 'plaza';
|
||||||
|
return 'topic';
|
||||||
|
}
|
||||||
|
document.addEventListener('click', function (e) {
|
||||||
|
if (!G.out || !e.target.closest) return;
|
||||||
|
var s = SEL[page()];
|
||||||
|
if (s && e.target.closest(s)) G.need(e);
|
||||||
|
}, true);
|
||||||
|
/* 评论输入框:一点进去就提示(别让人打完一段字才发现发不出去) */
|
||||||
|
document.addEventListener('focusin', function (e) {
|
||||||
|
if (!G.out || !e.target.matches) return;
|
||||||
|
var s = IN[page()];
|
||||||
|
if (s && e.target.matches(s)) { e.target.blur(); prompt(); }
|
||||||
|
}, true);
|
||||||
|
})();
|
||||||
@@ -63,6 +63,8 @@
|
|||||||
var SLUG = (location.pathname.match(/\/topic\/([^\/]+)\//) || [])[1] || '';
|
var SLUG = (location.pathname.match(/\/topic\/([^\/]+)\//) || [])[1] || '';
|
||||||
/* 11-04 微信转发图:每个专题一张 assets/share/t/<slug>.jpg(核心词大字 + logo),见 js/share-card.js */
|
/* 11-04 微信转发图:每个专题一张 assets/share/t/<slug>.jpg(核心词大字 + logo),见 js/share-card.js */
|
||||||
if (SLUG) (function () { var s = document.createElement('script'); s.src = '../../js/share-card.js?v=26110464'; s.onload = function () { window.mbShare('../../assets/share/t/' + SLUG + '.jpg'); }; document.head.appendChild(s); })();
|
if (SLUG) (function () { var s = document.createElement('script'); s.src = '../../js/share-card.js?v=26110464'; s.onload = function () { window.mbShare('../../assets/share/t/' + SLUG + '.jpg'); }; document.head.appendChild(s); })();
|
||||||
|
/* 11-07 退出登录后只看不写(js/login-gate.js):点赞、评论、发图都弹「登录后才能使用」 */
|
||||||
|
if (!window.mbGate) (function () { var s = document.createElement('script'); s.src = '../../js/login-gate.js?v=26110605'; document.head.appendChild(s); })();
|
||||||
var SK = 'mmbox.tp.v1', UK = (function () { var m = ((location.hash || '') + '&' + (location.search || '')).match(/[#?&]openid=([^&]*)/); return m ? decodeURIComponent(m[1]) : '_guest'; })();
|
var SK = 'mmbox.tp.v1', UK = (function () { var m = ((location.hash || '') + '&' + (location.search || '')).match(/[#?&]openid=([^&]*)/); return m ? decodeURIComponent(m[1]) : '_guest'; })();
|
||||||
function loadMe() { try { var a = JSON.parse(localStorage.getItem(SK) || '{}') || {}; var m = a[UK] || {}; m.cm = m.cm || {}; m.lk = m.lk || {}; return { a: a, m: m }; } catch (e) { return { a: {}, m: { cm: {}, lk: {} } }; } }
|
function loadMe() { try { var a = JSON.parse(localStorage.getItem(SK) || '{}') || {}; var m = a[UK] || {}; m.cm = m.cm || {}; m.lk = m.lk || {}; return { a: a, m: m }; } catch (e) { return { a: {}, m: { cm: {}, lk: {} } }; } }
|
||||||
function saveMe(st) { try { st.a[UK] = st.m; localStorage.setItem(SK, JSON.stringify(st.a)); } catch (e) {} }
|
function saveMe(st) { try { st.a[UK] = st.m; localStorage.setItem(SK, JSON.stringify(st.a)); } catch (e) {} }
|
||||||
|
|||||||
Reference in New Issue
Block a user