Greasy Fork

Greasy Fork is available in English.

Hide the floating link 隐藏左下角悬浮链接(Chrome/Edge)

[DeepSeek Chat] 完全隐藏链接悬浮提示,不影响默认链接颜色!无残留、即时生效,兼容所有网页。官网:https://www.deepseek.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        Hide the floating link  隐藏左下角悬浮链接(Chrome/Edge)
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  [DeepSeek Chat] 完全隐藏链接悬浮提示,不影响默认链接颜色!无残留、即时生效,兼容所有网页。官网:https://www.deepseek.com
// @author       DeepSeek Chat (https://www.deepseek.com)
// @match        *://*/*
// @grant        none
// @run-at       document-start
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 存储原始链接数据
    const linkStore = new WeakMap();

    // 主处理函数
    const handleLink = (link) => {
        if (!link.href || linkStore.has(link)) return;

        // 保存原始数据
        linkStore.set(link, {
            href: link.href,
            target: link.target || '_self',
            color: window.getComputedStyle(link).color, // 保存原始颜色
            events: []
        });

        // 关键点:完全移除href属性
        link.removeAttribute('href');
        link.style.color = linkStore.get(link).color; // 强制保持原始颜色

        // 添加点击事件处理
        const clickHandler = (e) => {
            if (e.button !== 0) return; // 只处理左键点击
            e.preventDefault();
            const data = linkStore.get(link);
            if (data.target === '_blank') {
                window.open(data.href, '_blank');
            } else {
                location.href = data.href;
            }
        };

        link.addEventListener('click', clickHandler);
        linkStore.get(link).events.push(['click', clickHandler]);

        // 添加视觉样式修复
        link.style.cursor = 'pointer';
    };

    // 恢复原始链接
    const restoreLink = (link) => {
        const data = linkStore.get(link);
        if (!data) return;

        // 恢复属性
        link.href = data.href;
        if (data.target) link.target = data.target;
        link.style.color = ''; // 清除颜色强制样式

        // 移除事件监听
        data.events.forEach(([type, handler]) => {
            link.removeEventListener(type, handler);
        });

        linkStore.delete(link);
        link.style.cursor = '';
    };

    // 事件监听
    document.addEventListener('mouseover', (e) => {
        const link = e.target.closest('a');
        if (link) handleLink(link);
    }, true);

    document.addEventListener('mouseout', (e) => {
        const link = e.target.closest('a');
        if (link) restoreLink(link);
    }, true);

    // 处理初始链接
    const initLinks = () => {
        document.querySelectorAll('a[href]').forEach(handleLink);
    };

    // 动态内容监听
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            mutation.addedNodes.forEach((node) => {
                if (node.nodeType === 1) {
                    if (node.matches('a[href]')) handleLink(node);
                    node.querySelectorAll('a[href]').forEach(handleLink);
                }
            });
        });
    });

    // 启动
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', initLinks);
    } else {
        initLinks();
    }
    observer.observe(document.body, {
        subtree: true,
        childList: true,
        attributes: true,
        attributeFilter: ['href']
    });
})();