enable-devtool

解决大部网站打开控制台页面直接重定向或 about:blank 问题

От 18.12.2025. Виж последната версия.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         enable-devtool
// @namespace    http://tampermonkey.net/
// @version      2025-12-18
// @description  解决大部网站打开控制台页面直接重定向或 about:blank 问题
// @author       Mr.Fang
// @match        https://*/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=www.google.com
// @grant        unsafeWindow
// @run-at 	 document-start
// @license      Apache-2.0
// ==/UserScript==

(function() {
	'use strict'

	const originalAddEventListener = window.addEventListener;

	// 重写 setTimeout ,拦截定时器执行 about:blank 内容
	const originalSetTimeout = unsafeWindow.setTimeout;
	unsafeWindow.setTimeout = function(callback, delay, ...args) {
		let toStr = callback?.toString();
		console.log(toStr)
		if (toStr && toStr.includes('about:blank')) return true; // 自定修改 about:blank 要匹配的内容
		const wrappedCallback = function() {
			callback(...args);  // 也可注释掉此行进行验证
		};
		return originalSetTimeout(wrappedCallback, delay);
	};

	// 重写 setInterval,拦截定时器执行 about:blank 内容
	const originalSetInterval = unsafeWindow.setInterval;
	unsafeWindow.setInterval = function(callback, delay, ...args) {
		let toStr = callback?.toString();
		console.log(toStr)
		if (toStr && toStr.includes('about:blank')) return true; // 自定修改 about:blank 要匹配的内容
		const wrappedCallback = function() {
			callback(...args); // 也可注释掉此行进行验证
		};
		return originalSetInterval(wrappedCallback, delay);
	};



	// 重写 addEventListener 方法
	window.addEventListener = function(type, listener, options) {
		if (type === 'devtoolschange') {
			// 拦截对 devtoolschange 事件的监听,阻止其添加
			console.log("拦截了添加“devtoolschange”侦听器的尝试.");
			return;
		}
		// 对其他事件,使用原始方法进行添加
		originalAddEventListener.call(window, type, listener, options);
	};

	// 如果已经存在的监听器需要移除
	const originalRemoveEventListener = window.removeEventListener;
	window.removeEventListener = function(type, listener, options) {
		if (type === 'devtoolschange') {
			// 拦截对 devtoolschange 事件监听的移除
			console.log("拦截了删除“devtoolschange”侦听器的尝试.");
			return;
		}
		// 对其他事件,使用原始方法进行移除
		originalRemoveEventListener.call(window, type, listener, options);
	};
	
	// 监听开发者窗口改变
	window.addEventListener("devtoolschange", event => {
		console.log('阻止')
		event.preventDefault();
		return
	});
	
	// 监听离开当前页面,例如使用 window.location.href
	window.addEventListener("beforeunload", function(event) {
		// 在用户尝试离开页面时执行你的逻辑
		// 例如:
		event.preventDefault();
		console.log('阻止');
		return
		// event.returnValue = ""; // 兼容老版本浏览器
		// return ""; // 兼容新版本浏览器
		// 或者显示一个警告框
		// return "您确定要离开吗?";
	});
})();