Greasy Fork

强制页面在新标签页打开

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

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

// ==UserScript==
// @name         强制页面在新标签页打开
// @namespace    http://tampermonkey.net/
// @version      0.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') {
			menuId = GM_registerMenuCommand('关闭', close)
		}
	}
	
	//修改页面以实现链接在新标签页打开
	function hookPage(){
		// 获取页面上的所有链接元素
		let links = document.getElementsByTagName('a');
		// 遍历每个链接元素并添加目标属性
		for (let i = 0; i < links.length; i++) {
			links[i].setAttribute('target', '_blank');
		}
		
		// 保存原始的 window.open 方法的引用
		let originalOpen = unsafeWindow.open;
		// 重写 window.open 方法
		unsafeWindow.open = function(url, target, features) {
			// 在新标签页中打开链接
			originalOpen.call(this, url, '_blank', features);
		};
	}
	
	function init(){
		whiteListManage();
	}
	init()
})();