Ouvrir les liens externes dans un nouvel onglet avec watcher

Ouvre dans un nouvel onglet les liens qui mènent à un domaine différent et surveille les changements du DOM

// ==UserScript==
// @name         Ouvrir les liens externes dans un nouvel onglet avec watcher
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  Ouvre dans un nouvel onglet les liens qui mènent à un domaine différent et surveille les changements du DOM
// @author       Morgan
// @match        *://*/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // Fonction pour vérifier si un lien mène à un domaine différent
    function isExternalLink(link) {
        try {
            const linkURL = new URL(link.href, document.baseURI);
            return linkURL.hostname !== window.location.hostname;
        } catch (e) {
            return false;
        }
    }

    // Fonction pour vérifier si un lien est un lien JavaScript
    function isJavaScriptLink(link) {
        const href = link.getAttribute('href');
        return href.startsWith('javascript:') || href === '#';
    }

    // Fonction pour mettre à jour les liens
    function updateLinks(root = document) {
        const links = root.querySelectorAll('a[href]');
        links.forEach(link => {
            if (!isJavaScriptLink(link) && isExternalLink(link)) {
                link.setAttribute('target', '_blank');
            }
        });
    }

    // Mettre à jour les liens au chargement de la page
    updateLinks();

    // Configurer un observateur de mutations pour surveiller les modifications du DOM
    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            if (mutation.addedNodes.length) {
                mutation.addedNodes.forEach(node => {
                    if (node.nodeType === Node.ELEMENT_NODE) {
                        updateLinks(node);
                    }
                });
            }
        });
    });

    // Configuration de l'observateur pour observer les ajouts d'enfants dans le DOM
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址