You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tampermonkey中console.log覆写失效问题及修复咨询

修复Tampermonkey中console.log覆盖失效的问题

问题原因

Tampermonkey默认启用沙箱隔离机制,脚本运行在独立环境中,你直接操作的console是Tampermonkey封装后的对象,并非浏览器原生全局console,因此覆盖console.log的逻辑无法生效。而Node.js或Chrome控制台无沙箱限制,直接操作原生console,所以逻辑能正常运行。

两种修复方案

方案一:禁用沙箱(最简单)

在脚本元数据中添加@grant none,让脚本直接运行在页面全局环境,此时操作的console就是原生对象:

// ==UserScript==
// @name         Test: overriding console.log
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  try to take over the world!
// @author       You
// @match        https://example.com
// @run-at       document-idle
// @noframes
// @grant none  // 新增该行禁用沙箱
// ==/UserScript==

var consoleLog = console.log;
var logs = [];
console.log = function() { 
  logs.push(arguments[0]);  
  consoleLog.apply(console, ["[Test App] ", ...arguments]);  
};
console.log('Hello, world!');
console.log(logs);

方案二:保留沙箱,操作全局console

如果需要使用Tampermonkey的API(不能禁用沙箱),则通过unsafeWindow访问页面全局的原生console:

// ==UserScript==
// @name         Test: overriding console.log
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  try to take over the world!
// @author       You
// @match        https://example.com
// @run-at       document-idle
// @noframes
// @grant unsafeWindow  // 声明unsafeWindow权限
// ==/UserScript==

// 获取页面全局的原生console.log
var consoleLog = unsafeWindow.console.log;
var logs = [];

unsafeWindow.console.log = function() {
  logs.push(arguments[0]);
  consoleLog.apply(unsafeWindow.console, ["[Test App] ", ...arguments]);
};

// 调用全局console触发覆盖逻辑
unsafeWindow.console.log('Hello, world!');
unsafeWindow.console.log(logs);

验证结果

修改后访问https://example.com,控制台会输出预期内容:

[Test App] Hello, world!
["Hello, world!"]

内容的提问来源于stack exchange,提问作者丶 Limeー来夢 丶

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:32:09