Opens shopping links in new tabs on rtings.com without affecting the current tab
// ==UserScript== // @name Rtings Open Shopping Links in New Tab Only // @namespace https://greasyfork.org/en/users/594496-divided-by // @author dividedby // @description Opens shopping links in new tabs on rtings.com without affecting the current tab // @version 1.1 // @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 }); })();