强制页面在新标签页打开

强制链接在新标签页打开,脚本采用白名单的模式,在油猴自带的菜单里面控制开关

当前为 2023-06-29 提交的版本,查看 最新版本

// ==UserScript==
// @name         强制页面在新标签页打开
// @namespace    http://tampermonkey.net/
// @version      0.1.1
// @description  强制链接在新标签页打开,脚本采用白名单的模式,在油猴自带的菜单里面控制开关
// @author       You
// @match        http://*/*
// @match        https://*/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=openai.com
// @grant GM_registerMenuCommand
// @grant GM_unregisterMenuCommand
// @grant unsafeWindow
// @license MIT
// ==/UserScript==

(function () {
  "use strict";

  //网页白名单管理
  function whiteListManage() {
    let menuId;
    //开启
    function open() {
      GM_unregisterMenuCommand(menuId);
      hookPage();
      localStorage.setItem("whiteList", "true");
      GM_registerMenuCommand("关闭", function () {
        close();
      });
    }
    //关闭
    function close() {
      GM_unregisterMenuCommand(menuId);
      localStorage.setItem("whiteList", "false");
      location.reload();
    }
    let whiteList = localStorage.getItem("whiteList");
    if (!whiteList || whiteList === "false") {
      menuId = GM_registerMenuCommand("开启", open);
    } else if (whiteList === "true") {
      hookPage();
      menuId = GM_registerMenuCommand("关闭", close);
    }
  }

  //修改页面以实现链接在新标签页打开
  function hookPage() {
    // 获取页面上的所有链接元素
    let links = document.getElementsByTagName("a");
    for (let i = 0; i < links.length; i++) {
      // 遍历每个链接元素并添加目标属性
      links[i].setAttribute("target", "_blank");
      //给标签添加点击事件,点击后标红
      links[i].addEventListener("click", function () {
        this.style.color = "darkred";
      });
    }

    // 保存原始的 window.open 方法的引用
    let originalOpen = unsafeWindow.open;
    // 重写 window.open 方法
    unsafeWindow.open = function (url, target, features) {
      // 在新标签页中打开链接
      originalOpen.call(this, url, "_blank", features);
    };
  }

  function init() {
    whiteListManage();
  }
  init();
})();