Почему окно (и unsafeWindow) не то же самое из пользовательского скрипта, что и из < script> tag?

столкнулся с проблемой при разработке этого небольшого пользовательского скрипта.Когда я хотел заблокировать каждый XMLHttpRequestс работающего веб-сайта w с моим скриптом ничего не происходило (по крайней мере, с 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();

То же самое при замене windowна unsafeWindow.

Однако, когда я применил этот маленький трюк, все сработало как по маслу:

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

Каждый вызов xhr.openзаменяется моей пользовательской функцией, никакого AJAX.

Итак, я предполагаю, что элемент windowотличается при вызове mainиз скрипта и при вызове из контейнер. Кто-нибудь может мне объяснить почему?

18
задан Brock Adams 31 May 2012 в 05:49
поделиться