Pourquoi est-fenêtre (et unsafeWindow) pas la même chose à partir d'un script, à partir d'une <script> tag?

J'ai été confronté à un problème pendant le développement de cette petit script. Quand j'ai voulu bloquer tous les XMLHttpRequest de l'exécution de site web avec mon script, il ne se passait rien (au moins avec Chrome):

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();

Même chose lors du remplacement de window par unsafeWindow.

Cependant, lorsque j'ai utilisé ce petit truc, tout a fonctionné comme un charme:

//No more call to main(), and:
var script = document.createElement("script");
script.textContent = "(" + main.toString() + ")();";
document.body.appendChild(script);

Chaque appel à xhr.open est remplacé par ma fonction personnalisée, plus d'AJAX.

Donc je suppose que la window élément n'est pas la même main est appelée à partir de l'intérieur du script que lorsqu'elle est appelée à partir d'un <script></script> conteneur. Quelqu'un peut-il m'expliquer pourquoi ?

OriginalL'auteur Loïs Di Qual | 2012-05-30