X.com 私信列表模糊处理

隐藏 X.com 私信列表。鼠标悬停在区域上时,所有对话会清晰显示。此版本极其稳定。

当前为 2025-09-23 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         X.com 私信列表模糊处理
// @name:en      X.com DM Blur
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  隐藏 X.com 私信列表。鼠标悬停在区域上时,所有对话会清晰显示。此版本极其稳定。
// @description:en Reliably hides the DM list on X.com by blurring the entire "All conversations" section. The section becomes clear on hover. This version is extremely stable.
// @author       BlingCc
// @match        https://x.com/messages/*
// @match        https://x.com/messages
// @icon         https://www.google.com/s2/favicons?sz=64&domain=x.com
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 1. 注入CSS样式
    // 这次我们定义一个作用于整个容器的模糊类
    const style = document.createElement('style');
    style.textContent = `
        /* 模糊容器的样式 */
        .dm-blur-section-container {
            /* 核心模糊效果 */
            filter: blur(5px);
            /* 平滑过渡动画 */
            transition: filter 0.2s ease-in-out;
            /* 解决边缘模糊不清晰的问题,可以稍微加一点内边距 */
            padding-top: 5px;
            margin-top: -5px;
        }

        /* 鼠标悬停在容器上时,移除模糊 */
        .dm-blur-section-container:hover {
            filter: blur(0);
        }
    `;
    document.head.appendChild(style);


    // 2. 核心处理函数
    function processAndBlur() {
        // 使用 XPath 查找包含“所有对话”文本的 h2 元素。
        // 这是最可靠的定位锚点。
        const headingXpath = "//h2[.//span[contains(text(), '所有对话')]]";
        const heading = document.evaluate(headingXpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;

        if (!heading) {
            // 如果没找到,说明页面未加载完成,稍后重试
            return;
        }

        // 找到标题后,向上追溯找到它所属的 <section> 容器
        // X.com 的页面结构通常使用 <section> 来划分区域
        const conversationSection = heading.closest('section');

        if (!conversationSection) {
            // 如果找到了标题但没找到 section 容器,也稍后重试
            return;
        }

        // 检查这个 section 是否已经被我们处理过,避免重复操作
        if (!conversationSection.classList.contains('dm-blur-section-container')) {
            console.log('Tampermonkey: 找到了“所有对话”区域,正在应用模糊效果。');
            // 将我们定义好的CSS类添加到这个区域上
            conversationSection.classList.add('dm-blur-section-container');
        }
    }


    // 3. 使用 MutationObserver 持续监控页面变化
    // 这是确保动态加载内容也能被处理的关键
    const observer = new MutationObserver(() => {
        // 任何DOM变化都可能意味着“所有对话”区域出现了,所以我们运行一次处理函数
        processAndBlur();
    });

    // 4. 启动监控
    // 监控整个文档的变化,因为我们不确定内容会出现在哪里
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // 5. 初始执行
    // 页面刚加载时,也尝试运行一次
    setTimeout(processAndBlur, 1000); // 延迟1秒,给页面足够的时间来初步渲染

})();