Estaba enfrentando un problema al desarrollar este small userscript. Cuando quería bloquear todos los XMLHttpRequest
desde el sitio web funcionando con mi escritura, no pasaba nada (al menos con Chrome):¿Por qué windows (y unssafeWindow) no son lo mismo desde un usuario que con una etiqueta <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();
Lo mismo cuando se sustituye por window
unsafeWindow
.
Sin embargo, cuando utilicé este pequeño truco, todo funcionó como un encanto:
// No more call to main(), and:
var script = document.createElement("script");
script.textContent = "(" + main.toString() + ")();";
document.body.appendChild(script);
Cada llamada a xhr.open
se sustituye por mi función personalizada, no más de AJAX.
Supongo que el elemento window
no es lo mismo cuando se llama a main
desde el script que cuando se llama desde un contenedor <script></script>
. ¿Puede alguien explicarme por qué?
Esta es una respuesta inesperada, larga, precisa e informativa. ¡Aprendí mucho con eso, gracias! (y gracias por editar el título de mi pregunta) –