Comment remplacer la fonction d'alerte avec un userscript?
-
09-10-2019 - |
Question
Sur place il y a du code comme ça (son site sur le réseau local)
<script language="JavaScript" type="text/javascript">
alert("ble");
</script>
J'essaie de désactiver cette alerte à l'aide de GM. Je suis en train de le faire
unsafeWindow.alert=function() {};
mais je vois l'alerte et obtenir cette erreur
Error: uncaught exception: [Exception... "Component is not available" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///C:/Documents%20and%20Settings/arokitnicki/Dane%20aplikacji/Mozilla/Firefox/Profiles/sm4bsods.default/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D/components/greasemonkey.js :: anonymous :: line 377" data: no]
Comment désactiver cette alerte?
P.S. c'est pas un javascript question, mais Greasemonkey question.
EDIT:
Le site de sa société, donc je ne peux pas coller le code réel
<head>
<script>
dojo.require("dojo.back");
dojo.back.init();
</script>
</head>
<body onload="someMethod()">
<iframe></iframe>
<script>
alert("bla");
</script>
</body>
Il y a aussi quelques scripts et déclarations CSS en-tête.
La solution
Mise à jour: Pour les versions modernes de Tampermonkey, Violentmonkey, Greasemonkey (mais fortement recommandé d'éviter GM 4 +) :
Vous pouvez intercepter alert()
dans la plupart des cas à l'aide @run-at document-start
. Par exemple, charger ce script, puis visitez la page de test :
// ==UserScript==
// @name _Overwrite Alert
// @match *://output.jsbin.com/*
// @grant none
// @run-at document-start
// ==/UserScript==
var alrtScope;
if (typeof unsafeWindow === "undefined") {
alrtScope = window;
} else {
alrtScope = unsafeWindow;
}
alrtScope.alert = function (str) {
console.log ("Greasemonkey intercepted alert: ", str);
};
Notez que si vous êtes en cours d'exécution Tampermonkey , vous pouvez alertes bloc plus efficacement par le passage à Inject Mode: Instant
:
Tampermonkey Paramètres => Mode Config: Advanced
=> Experimental => Injecter Mode:. Instant
Si votre script nécessite des fonctions GM_ , il doit définir @grant
autre que rien. Dans ce cas, utilisez exportFunction()
comme ceci:
// ==UserScript==
// @name _Overwrite Alert
// @match *://output.jsbin.com/*
// @grant GM_addStyle
// @run-at document-start
// ==/UserScript==
function myAlert (str) {
console.log ("Greasemonkey intercepted alert: ", str);
}
unsafeWindow.alert = exportFunction (myAlert, unsafeWindow);
Vieille réponse, pour Greasemonkey avant Août 2011:
unsafeWindow.alert=function() {};
fonctionne très bien dans des situations choisies.
Mais, si tel est vraiment le code sur la page, vous ne serez pas en mesure d'arrêter cette alerte en utilisant Greasemonkey.
En effet, cette alerte se déclenche pendant la charge de la page et avant l'événement DOMContentLoaded
-. Qui est quand Greasemonkey est tiré
Chargez ce script GM:
// ==UserScript==
// @name Overwrite Alert
// @description Overwrites alert()
// @include http://jsbin.com/*
// ==/UserScript==
unsafeWindow.alert=function() {};
Alors visitez:. http://jsbin.com/ajeqe4/6
Contrôle du code ( http://jsbin.com/ajeqe4/6/edit ), Vous verrez 3 alertes. Greasemonkey est seulement en mesure d'arrêter les alertes sur le feu load
(en général).
D'autres facteurs peuvent bloquer la capacité de GM d'arrêter l'alerte ... La page se charge trop rapide ou fermetures, peut-être.
Coller la source de cette page, non éditée si possible, à pastebin.com. Il peut y avoir quelque chose d'autre que vous pouvez faire. Peut-être bloquer le script via Adblock?
Dans le cas contraire, vous devrez écrire une extension / add-on.
Autres conseils
Si vous utilisez Scriptish les commandes suivantes vont toujours du travail:
// ==UserScript==
// @id alert-killer-test@erikvold.com
// @name Overwrite Alert
// @description Overwrites alert()
// @include *
// @run-at document-start
// ==/UserScript==
unsafeWindow.alert=function() {};
Vous pouvez obtenir le script utilisateur .