在Tampermonkey中重写全局alert()函数不起作用

Rewriting the global alert() function doesn't work in Tampermonkey

本文关键字:函数 不起作用 alert 全局 Tampermonkey 重写      更新时间:2023-09-26

在Greasemonkey中,我可以重写全局alert()函数:

window.alert = function() {...}

,它在任何地方都有效。
但是,在Tampermonkey (Chrome)中,它只能在自己的脚本上工作。

为什么?我能让它在全球范围内发挥作用吗?

实际上,这只会在Greasemonkey有时工作。授予模式必须是none——我不建议这样做。正如您所发现的,不小心触发该模式会导致脚本不可移植——以及其他超出这个问题范围的错误。

要使此代码在Tampermonkey(和Greasemonkey)上工作,使用unsafeWindow,如下所示:

// ==UserScript==
// @name     _YOUR_SCRIPT_NAME
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant    unsafeWindow
// ==/UserScript==
unsafeWindow.alert = function() {...}


或者,使用脚本注入,如本答案所示。



@grant unsafeWindow指令是为Greasemonkey—恢复沙盒,并允许使用unsafeWindow。这使得相同的脚本在Tampermonkey和Greasemonkey中以相同的方式工作。