有些大博客大量内容就几十个字,或者贴段代码自嗨。
不想被这些数据源刷屏,所以写了这个脚本。应该,也许,没有大问题吧?
// ==UserScript==
// @name vxna_blacklist
// @namespace http://tampermonkey.net/
// @version 2024-06-20
// @description try to take over the world!
// @author You
// @match https://v2ex.com/xna*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==
(function() {
'use strict';
const vxna_blacklist = JSON.parse(localStorage.getItem("vxna_blacklist")) || [];
let init = false;
const handle = () => {
document
.querySelectorAll(".xna-entry.cell .xna-entry-source .node")
.forEach((el) => {
if (vxna_blacklist.includes(el.text)) {
el.closest(".xna-entry.cell").style.display = "none";
} else {
if (init) return;
const fragment = document.createDocumentFragment();
const span1 = document.createElement("span");
const span2 = document.createElement("span");
span1.className = "fade";
span2.className = "fade black";
span1.innerHTML = " • ";
span2.innerHTML = " 屏蔽 ";
span2.setAttribute("data-name", el.text);
fragment.appendChild(span1);
fragment.appendChild(span2);
el.closest("div").appendChild(fragment);
}
});
init = true;
};
handle();
document.querySelector("#Main>.box").addEventListener("click", (e) => {
const target = e.target;
if (!target) return;
if (target.className === "fade black") {
vxna_blacklist.unshift(target.getAttribute("data-name"));
localStorage.setItem("vxna_blacklist", JSON.stringify(vxna_blacklist));
handle();
}
});
})();
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.