Greasy Fork

Greasy Fork is available in English.

Rtings Open Shopping Links in New Tab Only

Opens shopping links in new tabs on rtings.com without affecting the current tab

目前为 2024-09-13 提交的版本。查看 最新版本

// ==UserScript==
// @name        Rtings Open Shopping Links in New Tab Only
// @namespace   http://greasyfork.icu/en/users/594496-divided-by
// @author      dividedby
// @description Opens shopping links in new tabs on rtings.com without affecting the current tab
// @version     1.0
// @license     GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html
// @contributionURL     https://www.paypal.com/cgi-bin/webscr?cmd=_donations&[email protected]&item_name=Rtings+Tab+Donation
// @contributionAmount  $1
// @match       https://www.rtings.com/*
// run-at       document-idle
// ==/UserScript==

(function() {
    'use strict';

    // Array of domain patterns to match
    const domainPatterns = [
        'amazon.com',
        'ebay.com',
        'walmart.com',
        'target.com',
        'bestbuy.com',
        'bhphotovideo.com',
        'shop-links.co'
    ];

    function handleClick(event) {
        const link = event.currentTarget;
        if (domainPatterns.some(pattern => link.href.includes(pattern))) {
            event.preventDefault();
            event.stopPropagation();
            window.open(link.href, '_blank', 'noopener,noreferrer');
        }
    }

    function enhanceLinks() {
        const selector = domainPatterns.map(pattern => `a[href*="${pattern}"]`).join(',');
        const links = document.querySelectorAll(`${selector}:not([data-enhanced])`);
        links.forEach(link => {
            link.setAttribute('data-enhanced', 'true');
            link.addEventListener('click', handleClick, true);
        });
    }

    enhanceLinks();

    const observer = new MutationObserver(mutations => {
        if (mutations.some(mutation => mutation.addedNodes.length > 0)) {
            enhanceLinks();
        }
    });
    observer.observe(document.body, { childList: true, subtree: true });
})();