问题背景

很多网站在检测到浏览器插件(如油猴脚本)注入控制台时,会弹出警告:”检测到您的浏览器插件正在注入异常脚本,请使用隐身模式打开页面!”

这是因为网站通过监听 console 对象的方法调用或 error 事件来检测是否有脚本在”窥探”或修改控制台行为。


解决方案

  1. 拦截错误事件:阻止 errorunhandledrejection 事件的传播
  2. 伪装 console 方法:用空函数替换所有 console 方法,并伪装成原生函数

使用教程

粘贴脚本代码

将以下完整代码粘贴到编辑器中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// ==UserScript==
// @name 静默控制台
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 完全静默浏览器控制台,阻止错误输出和日志打印
// @author zxclf
// @match *://*/*
// @run-at document-start
// @grant none
// @noframes
// ==/UserScript==

(function() {
'use strict';
const methods = ['log', 'warn', 'error', 'info', 'debug', 'trace', 'table', 'dir', 'dirxml',
'group', 'groupCollapsed', 'groupEnd', 'time', 'timeEnd', 'profile', 'profileEnd',
'count', 'assert', 'clear'];
const originalConsole = window.console;
const fakeCache = new Map();

const fakeHandler = function(e) {
e.stopImmediatePropagation();
e.preventDefault();
};

Object.defineProperty(fakeHandler, 'name', { value: 'onGlobalError', configurable: false });

window.addEventListener('error', fakeHandler, true);
window.addEventListener('unhandledrejection', fakeHandler, true);

window.console = new Proxy(originalConsole, {
get(target, prop, receiver) {
if (methods.includes(prop) && typeof target[prop] === 'function') {
if (!fakeCache.has(prop)) {
const originalFn = target[prop];
const fake = function() {};
Object.defineProperty(fake, 'name', {
value: prop,
configurable: false,
enumerable: false,
writable: false
});
Object.defineProperty(fake, 'length', {
value: originalFn.length,
configurable: false,
enumerable: false,
writable: false
});
const nativeStr = `function ${prop}() { [native code] }`;
Object.defineProperty(fake, 'toString', {
value: () => nativeStr,
configurable: false,
enumerable: false,
writable: false
});
fakeCache.set(prop, fake);
}
return fakeCache.get(prop);
}
return Reflect.get(target, prop, receiver);
}
});
})();

保存并启用脚本

  1. Ctrl+S(Windows/Linux)或 Cmd+S(Mac)保存
  2. 或者点击工具栏的 “文件” → “保存”

测试效果

  1. 打开之前报错的网站
  2. F12 打开开发者工具
  3. 切换到 Console(控制台)选项卡
  4. 错误页面不会再弹出”检测到插件注入”的警告

总结

脚本通过”静默”手段让网站无法检测到插件的存在,从而绕过”请使用隐身模式”的警告。它适用于绝大多数基于 console 检测的网站。