在当前标签页中打开链接

所有链接都会在当前标签页中打开,而不是新的标签页或窗口,脚本菜单可以设置当前网站启用与禁用

// ==UserScript==
// @name         在当前标签页中打开链接
// @version       8
// @author       ChatGPT
// @description  所有链接都会在当前标签页中打开,而不是新的标签页或窗口,脚本菜单可以设置当前网站启用与禁用
// @match        *://*/*
// @grant        GM_registerMenuCommand
// @grant        GM_setValue
// @grant        GM_getValue
// @run-at       document-idle
// @namespace    https://greasyfork.org/users/452911
// ==/UserScript==

(function() {
    'use strict';

    // 获取当前网站URL,并根据其生成一个唯一的存储键
    var storageKey = window.location.hostname;

    // 根据存储键获取已保存的设置(如果存在)
    var isEnabled = GM_getValue(storageKey, true);

    function showAlert() {
  window.open = function(url, name, features) {
  window.location.href = url;
}
  function modifyLinks() {
    let links = document.getElementsByTagName('a');
    for (let i = 0; i < links.length; i++) {
      links[i].setAttribute('target', '_self');
    }
    let base = document.getElementsByTagName('base')[0];
    if (base) {
      base.setAttribute('target', '_self');
    } else {
      let head = document.getElementsByTagName('head')[0];
      let newBase = document.createElement('base');
      newBase.setAttribute('target', '_self');
      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);
})();
    }

    // 根据保存的设置来启用或禁用弹出提示框功能
    if (isEnabled) {
        showAlert();
    }

    // 创建油猴菜单项,在菜单中添加“启用”和“禁用”选项
    GM_registerMenuCommand(isEnabled ? '禁用强制当前标签打开' : '启用当前强制标签打开', function() {
        isEnabled = !isEnabled;
        GM_setValue(storageKey, isEnabled);
        if (isEnabled) {
            showAlert();
        }
    });
})();