Si è verificato un problema durante lo sviluppo di questo small userscript. Quando ho voluto bloccare ogni XMLHttpRequest
dal sito Web in esecuzione con il mio script, non succedeva niente (almeno con Chrome):Perché window (e unsafeWindow) non sono gli stessi di un userscript come da un tag <script>?
function main() {
// Override XHR.open with a custom function
window.XMLHttpRequest.prototype.open = function() {
// Nothing... so it's supposed to block every xhr.open() call
}
}
main();
Stessa cosa quando si sostituisce window
da unsafeWindow
.
Tuttavia, quando ho usato questo piccolo trucco, tutto ha funzionato come un fascino:
// No more call to main(), and:
var script = document.createElement("script");
script.textContent = "(" + main.toString() + ")();";
document.body.appendChild(script);
Ogni chiamata a xhr.open
è sostituita dalla mia funzione personalizzata, non più AJAX.
Quindi immagino che l'elemento window
non sia lo stesso quando main
viene chiamato dall'interno dello script rispetto a quando viene chiamato da un contenitore <script></script>
. Qualcuno può spiegarmi perché?
Questa è una risposta inaspettata, lunga, precisa e informativa. Ho imparato molto, grazie! (e grazie per aver modificato il titolo della mia domanda) –