搜索引擎新标签打开链接

谷歌、百度、搜狗、必应、F搜、头条、无追搜索、360、DuckDuckGo、Ecosia 搜索结果新标签打开

// ==UserScript==
// @name         搜索引擎新标签打开链接
// @description  谷歌、百度、搜狗、必应、F搜、头条、无追搜索、360、DuckDuckGo、Ecosia 搜索结果新标签打开
// @version      2.7
// @author       ChatGPT
// @match        *://www.wuzhuiso.com/*
// @match        *://www.so.com/*
// @match        *://m.so.com/*
// @match        *://so.toutiao.com/*
// @match        *://www.ecosia.org/*
// @match        *://fsoufsou.com/*
// @match        *://duckduckgo.com/*
// @match        *://yandex.com/*
// @match        *://www.google.co.jp/*
// @match        *://www.google.com.hk/*
// @match        *://www.google.com/*
// @match        *://m.baidu.com/*
// @match        *://www.baidu.com/*
// @match        *://wap.sogou.com/*
// @match        *://m.sogou.com/*
// @match        *://www.sogou.com/*
// @match        *://cn.bing.com/*
// @match        *://www.bing.com/*
// @run-at       document-end
// @grant        none
// @namespace    https://greasyfork.org/users/452911
// ==/UserScript==

(function() {
  'use strict';

  if (window.location.href.search(/search|q=|wd=|word=/) !== -1) {
    function modifyLinks() {
      let linksToOpenInSelf = document.querySelectorAll('a.sb_halfnext, a[class^="container"], a.control');
      linksToOpenInSelf.forEach(link => {
        link.setAttribute('target', '_self');
      });

      let linksToOpenInNewTab = document.querySelectorAll('a:not(.sb_halfnext):not([class^="container"]):not(.control)');
      linksToOpenInNewTab.forEach(link => {
        link.setAttribute('target', '_blank');
      });

      let base = document.querySelector('base');
      if (!base) {
        let head = document.querySelector('head');
        let newBase = document.createElement('base');
        newBase.setAttribute('target', '_blank');
        head.appendChild(newBase);
      }
    }

    modifyLinks();

   (function() {
    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            if (mutation.addedNodes.length > 0) {
                mutation.addedNodes.forEach(addedNode => {
                    if (addedNode.nodeType === Node.ELEMENT_NODE) {
                        modifyLinks();
                    }
                });
            }
        });
    });

    const config = { childList: true, subtree: true };

    observer.observe(document.body, config);
})();       
    }
})();