Come ignorare la funzione di allarme con un userscript?
-
09-10-2019 - |
Domanda
Sul sito c'è il codice del genere (il suo sito on LAN)
<script language="JavaScript" type="text/javascript">
alert("ble");
</script>
cerco di disabilitare tale avviso con GM. Stavo cercando di fare questo
unsafeWindow.alert=function() {};
ma vedo l'allarme e ottenere questo errore
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]
Come disattivare tale avviso?
P.S. questo è NON è un javascript domanda, ma una Greasemonkey questione.
Modifica
Il suo sito web dell'azienda, quindi non posso incollare il codice vero e proprio
<head>
<script>
dojo.require("dojo.back");
dojo.back.init();
</script>
</head>
<body onload="someMethod()">
<iframe></iframe>
<script>
alert("bla");
</script>
</body>
Ci sono anche alcuni script e dichiarazioni CSS nell'intestazione.
Soluzione
Aggiornamento: Per le versioni moderne di Tampermonkey, Violentmonkey, Greasemonkey (ma fortemente consigliato per evitare di GM 4 +) :
È possibile intercettare alert()
nella maggior parte dei casi utilizzando @run-at document-start
. Ad esempio, caricare questo script e visita il la pagina di prova :
// ==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);
};
Si noti che se si è in esecuzione Tampermonkey , è possibile blocco avvisi in modo più efficace con il passaggio a Inject Mode: Instant
:
Tampermonkey Impostazioni => Config mode: Advanced
=> Sperimentale => modalità di inserimento. Instant
Se lo script richiede funzioni GM_ , è necessario impostare @grant
diverso da none. In questo caso l'uso exportFunction()
in questo modo:
// ==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);
Old risposta, per Greasemonkey prima di agosto 2011:
unsafeWindow.alert=function() {};
funziona bene in alcune situazioni.
Ma, se questo è davvero il codice sulla pagina, quindi non sarà in grado di fermare tale avviso con Greasemonkey.
Questo è dovuto al fatto che allerta si attiva durante il caricamento della pagina e prima dell'evento DOMContentLoaded
-. Che è quando Greasemonkey è sparato
Caricare questo script GM:
// ==UserScript==
// @name Overwrite Alert
// @description Overwrites alert()
// @include http://jsbin.com/*
// ==/UserScript==
unsafeWindow.alert=function() {};
Poi visita:. http://jsbin.com/ajeqe4/6
Controllo del codice ( http://jsbin.com/ajeqe4/6/edit ), si vedrà 3 avvisi. Greasemonkey è in grado di fermare gli allarmi solo che il fuoco su load
(di solito).
Altri fattori possono bloccare la capacità di GM per interrompere l'avviso ... La pagina carichi troppo veloce o chiusure, forse.
Incolla la fonte di quella pagina, inediti se possibile, a pastebin.com. Ci può essere qualche altra cosa che si può fare. Forse bloccare lo script tramite AdBlock?
In caso contrario, si dovrà scrivere un'estensione / add-on.
Altri suggerimenti
Se si utilizza Scriptish allora quanto segue funziona sempre:
// ==UserScript==
// @id alert-killer-test@erikvold.com
// @name Overwrite Alert
// @description Overwrites alert()
// @include *
// @run-at document-start
// ==/UserScript==
unsafeWindow.alert=function() {};
Puoi get lo script utente qui .