In Greasemonkey I can rewrite the global alert()
function with:
window.alert = function() {...}
and it works anywhere.
But, in Tampermonkey (Chrome), it only works on it's own script.
Why? And could I make it work globally?
In Greasemonkey I can rewrite the global alert()
function with:
window.alert = function() {...}
and it works anywhere.
But, in Tampermonkey (Chrome), it only works on it's own script.
Why? And could I make it work globally?
Actually, that will only work in Greasemonkey sometimes. The grant mode has to be none
-- which I recommend against. As you have discovered, accidentally tripping that mode makes un-portable scripts -- along with other sins which are beyond the scope of this question.
To make this code work on Tampermonkey (and Greasemonkey too), use unsafeWindow, like so:
// ==UserScript==
// @name _YOUR_SCRIPT_NAME
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant unsafeWindow
// ==/UserScript==
unsafeWindow.alert = function() {...}
Or, use script injection as shown in this answer.
The @grant unsafeWindow
directive is for Greasemonkey -- to restore the sandbox and to allow use of unsafeWindow
. This lets the same script work the same way in both Tampermonkey and Greasemonkey.