V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
欢迎提交自己的博客到 VXNA,请提供博客的 RSS/Atom/JSON Feed/Planet 地址。

关于 VXNA 的介绍:

https://blog.v2ex.com/vxna/
Track13
V2EX  ›  VXNA

屏蔽 VXNA 不想看到的数据源

  •  
  •   Track13 · 153 天前 · 1071 次点击
    这是一个创建于 153 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有些大博客大量内容就几十个字,或者贴段代码自嗨。

    不想被这些数据源刷屏,所以写了这个脚本。应该,也许,没有大问题吧?

    // ==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();
        }
      });
    })();
    
    6 条回复    2024-07-18 04:27:35 +08:00
    InDom
        1
    InDom  
       153 天前   ❤️ 1
    虽然名字也不会变,但是屏蔽规则记录 href 比 text 更可靠吧?
    maladaxia
        2
    maladaxia  
       153 天前
    误操作之后太难恢复了
    建议使用

    // @grant GM_setValue
    // @grant GM_getValue
    Track13
        3
    Track13  
    OP
       153 天前
    @maladaxia 确实是个问题,后面有时间再加个 ui 管理黑名单吧。
    maladaxia
        4
    maladaxia  
       153 天前
    使用官方的这个存储接口, tampermonkey 自带存储界面, 省事不少
    Track13
        5
    Track13  
    OP
       152 天前
    @maladaxia tampermonkey 自带存储界面???你是说自定义菜单? tampermonkey 我不熟,麻烦说详细点。
    Livid
        6
    Livid  
    MOD
       126 天前
    比如哪个源会需要用到这个功能?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3433 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 10:46 · PVG 18:46 · LAX 02:46 · JFK 05:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.