Greasy Fork

来自缓存

Greasy Fork is available in English.

强制新标签页打开链接

将所有链接设置为在新标签页中打开 (target="_blank")

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         强制新标签页打开链接
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  将所有链接设置为在新标签页中打开 (target="_blank")
// @author       Gemini
// @match        *://*/*
// @grant        none
// @license MIT
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // 逻辑 1:每当页面加载或内容变化时,修改所有 a 标签
    function updateLinks() {
        const links = document.querySelectorAll('a');
        links.forEach(link => {
            // 排除内链(如 #section1)和 javascript 脚本链接
            const href = link.getAttribute('href');
            if (href && !href.startsWith('#') && !href.startsWith('javascript:')) {
                link.target = '_blank';
                // 安全最佳实践:防止新页面获取原页面的 window 对象
                link.rel = 'noopener noreferrer';
            }
        });
    }

    // 逻辑 2:监听点击事件(处理动态生成的链接)
    document.addEventListener('click', function(e) {
        let target = e.target;
        // 向上寻找最近的 a 标签(处理点击到链接里的图片或图标的情况)
        while (target && target.tagName !== 'A') {
            target = target.parentNode;
        }
        if (target && target.tagName === 'A') {
            const href = target.getAttribute('href');
            if (href && !href.startsWith('#') && !href.startsWith('javascript:')) {
                target.target = '_blank';
            }
        }
    }, true);

    // 初始化执行
    updateLinks();

    // 观察页面变化(针对单页应用如微博、知乎等动态加载内容)
    const observer = new MutationObserver(updateLinks);
    observer.observe(document.body || document.documentElement, {
        childList: true,
        subtree: true
    });

})();