一直在用 V2EX.REP 这个扩展看帖子,主要用它右边的“当前页热门回复”。前两天突然发现那一栏错位了:用户名和时间被挤成一个字一行,点楼号也跳不到原楼层了。
等了几天没见更新,手痒,就让 Claude Code 帮着查了一下,顺手修了。说明一下,我不是作者,跟作者也不认识,只是遇到问题修了一下,发出来给遇到同样问题的人参考。
原因
V2EX 最近改了回复区的结构,用户名、时间和红心现在排在一个弹性布局的行里,原来那个装感谢、回复按钮的工具栏(.fr)也没了。插件还是按旧结构写的,于是出了两个问题:
修复方法
不用改插件本身,在 Tampermonkey (或其他用户脚本管理器)里新建一个脚本,粘贴下面的内容并保存,再刷新帖子页就行:
// ==UserScript==
// @name V2EX.REP 热门回复侧栏修复补丁
// @namespace v2ex-rep-top-replies-patch
// @version 1.0
// @description V2EX 改版后,V2EX.REP 右侧“当前页热门回复”用户名被挤成竖排、楼号点了不跳转
// @match https://*.v2ex.com/t/*
// @match https://v2ex.com/t/*
// @match https://*.v2ex.co/t/*
// @run-at document-start
// @grant GM_addStyle
// ==/UserScript==
// 1. 排版:用户名、时间、红心在侧栏里换行显示,不再挤成一字一行
GM_addStyle(`
#top_replies td > .flex-one-row { flex-wrap: wrap; row-gap: 4px; }
#top_replies td > .flex-one-row > .flex-one-row:first-child { flex: 1 1 100%; flex-wrap: wrap; min-width: 0; row-gap: 2px; }
#top_replies td > .flex-one-row > .flex-one-row:last-child { margin-left: auto; }
#top_replies td > .flex-one-row strong { flex: 1 1 100%; min-width: 0; overflow-wrap: anywhere; }
#top_replies td > .flex-one-row .ago { white-space: nowrap; }
#top_replies td > .flex-one-row br { display: none; }
#top_replies .no { cursor: pointer; }
`);
// 2. 点击:侧栏里的楼号点一下,跳到正文里对应的那条回复
document.addEventListener('click', (event) => {
const no = event.target.closest('#top_replies .no');
if (!no) return;
const cloned = no.closest('[id^="top_r_"]');
const target = cloned && document.getElementById(cloned.id.slice(4));
if (!target) return;
event.preventDefault();
event.stopPropagation();
target.scrollIntoView({ block: 'start' });
}, true);
修好后,侧栏每条回复第一行是用户名,第二行是时间和红心,楼号能点了。
几点说明:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.