写了一个油猴脚本解决L站新标签打开帖子导致浏览话题数不涨

三三 2026-06-05 13:35 1

起因 天塌了,我一直是使用右键打开帖子,难怪话题浏览数酷酷往下掉。 - 搞七捻三 - LINUX DO



因为习惯使用新标签打开每一个L站的帖子浏览,最近突然发现自己的浏览话题数居然不达标了,但是我基本都是高强度猛猛刷L站的,这下可难受了,3级要不保了。于是使用AI把自己的油猴脚本更新了一下,目前可以正常增加话题浏览数了。


// ==UserScript==
// @name Linux.do 新标签打开话题并记录浏览量
// @namespace local-linuxdo
// @version 3.0.0
// @description Linux.do 话题强制新标签打开,并在后台标签页补发 Discourse 浏览追踪请求
// @author sansan048
// @match https://linux.do/*
// @match https://idcflare.com/*
// @run-at document-start
// @grant none
// ==/UserScript==

(() => {
"use strict";

/**
* Part 1:
* 在列表页、搜索页、通知菜单等位置,强制话题链接从新标签打开
*/
document.addEventListener(
"click",
function (e) {
const selector = `
.topic-list a.title,
.topic-list a.raw-topic-link,
.search-results .topic-title,
.user-menu .notification a,
.user-menu .quick-access-panel li a
`;

const link = e.target.closest(selector);
if (!link) return;

// 排除菜单里的 tab / button,避免点通知分类按钮也新开标签
if (link.classList.contains("btn")) return;

const href = link.href;
if (!href) return;

// 只处理 linux.do 内部链接
if (!href.startsWith("https://linux.do/")) return;

// 只处理话题页链接,避免用户菜单里的设置、个人页等也被新开
const url = new URL(href);
if (!url.pathname.startsWith("/t/")) return;

e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();

window.open(href, "_blank", "noopener");
},
true
);

/**
* Part 2:
* 如果当前页面本身是话题页,并且是后台新标签打开,
* 则补发 Discourse track view 请求。
*/
const topicId = getTopicId(location.pathname);
if (!topicId) return;

const storageKey = `linuxdo-track-view:${topicId}:${location.pathname}`;

function isBackgroundTab() {
return document.visibilityState === "hidden" || !document.hasFocus();
}

function trackTopicViewOnce() {
// 已补发过就不再重复请求
if (sessionStorage.getItem(storageKey)) return;

// 前台标签页交给 Discourse 原生逻辑,不干预
if (!isBackgroundTab()) return;

sessionStorage.setItem(storageKey, String(Date.now()));

fetch(`/t/${topicId}.json?track_visit=true&forceLoad=true`, {
method: "GET",
credentials: "include",
cache: "no-store",
headers: {
Accept: "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",

// 关键请求头:让 Discourse 识别这是一次话题浏览追踪
"Discourse-Present": "true",
"Discourse-Track-View": "true",
"Discourse-Track-View-Topic-Id": topicId
}
})
.then((response) => {
const info = {
topicId,
status: response.status,
trackView: response.headers.get("x-discourse-trackview"),
browserPageView: response.headers.get("x-discourse-browserpageview")
};

console.debug("[linux.do track view patch]", info);

// 请求失败时允许后续重试
if (!response.ok) {
sessionStorage.removeItem(storageKey);
}
})
.catch((error) => {
sessionStorage.removeItem(storageKey);
console.error("[linux.do track view patch]", error);
});
}

// document-start 时尝试一次
trackTopicViewOnce();

// 后台标签页 visibilityState 有时初始化较慢,延迟再试几次
setTimeout(trackTopicViewOnce, 300);
setTimeout(trackTopicViewOnce, 1200);
setTimeout(trackTopicViewOnce, 2500);

function getTopicId(pathname) {
const parts = pathname.split("/").filter(Boolean);

// /t/12345
if (parts[0] === "t" && /^\d+$/.test(parts[1] || "")) {
return parts[1];
}

// /t/slug/12345
if (parts[0] === "t" && /^\d+$/.test(parts[2] || "")) {
return parts[2];
}

return null;
}
})();

可以继续愉快的猛猛刷L站了^-^

最新回复 (12)
  • ooos 06-06 05:17
    2

    真的吗 试试看 才知道现在不算了 右键新窗口真的好用啊 选一堆出来打开出来 然后慢慢看 ^-^

  • Chambo Wu 06-06 07:19
    3

    之前在tg的channel看帖子,发现也是不会加浏览话题的,有了这个脚本,在channel点击话题默认浏览器打开,也是一个解决方案 ^-^

  • Listky 06-06 09:16
    4

    佬可以解释一下脚本逻辑吗?不知道是否违规,怕怕

  • 三三 楼主 06-06 10:24
    5

    原理就是左键点击帖子会在新标签页打开页面,和你用鼠标中键或者Ctrl加左键点击帖子的效果一样,只不过补发一次Discourse浏览追踪用于记录话题浏览数。

  • 72 06-06 12:04
    6

    看看这位老友写的,似乎不需要新标签也打开了



    本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:

    我的帖子已经打上 开源推广 标签: 是
    我的开源项目完整开源,无未开源部分: 是
    我的开源项目已链接认可 LINUX DO 社区: 是
    我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
    以上选择我承诺是永久有效的,接受社区和佬友监督: 是

    以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出
    不知道佬友们…
  • 三三 楼主 06-06 13:48
    7

    挺好的,只不过我还是习惯水平的标签页

  • lhj5426 06-06 13:55
    8

    虽然安装了 佬的脚本 但是 还是忍不住去按鼠标中键打开…

  • 三三 楼主 06-06 14:38
    9

    也可以的,脚本主要是解决话题浏览数不生效的问题,不然要掉3级了

  • W.X 06-06 14:47
    10

    虽然已经飞升了,此乃造福还没飞升佬友,善举,善举!^-^

  • wahaha1 06-06 14:52
    11

    经常刷帖的时候,看到好几个想看的,点一个看完再返回翻不到了,或者要翻好久,这真是好东西,太需要了,感谢佬 ^-^

  • 跟我走吧 06-09 11:06
    13

    太感谢了,我就是掉了一直上不去,今天才知道原因

  • botong 06-09 14:44
    14

    我一度怀疑是我账号出了问题,现在已经掉到100多了 ^-^

    感谢佬友分享~

* 帖子来源Linux.do
返回