为什么用户脚本的窗口(和unsafeWindow)与<script>标记的窗口不同?

在开发此小型用户脚本时,我遇到了一个问题。当我想XMLHttpRequest使用脚本阻止正在运行的网站上的所有内容时,什么也没发生(至少使用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从<script></script>容器中调用时的元素是不同的。有人可以解释我为什么吗?


隔江千里
浏览 1021回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript