我正在编写一个 Greasemonkey 脚本,我想在其中重载XMLHttpRequest.prototype.open
函数以劫持页面上的 Ajax 调用。
我正在使用以下代码:
// ==UserScript==
// @name name
// @namespace namespace
// @description desc
// @include https://url*
// @version 1.0
// ==/UserScript==
if (XMLHttpRequest.prototype) {
//New Firefox Versions
XMLHttpRequest.prototype.realOpen = XMLHttpRequest.prototype.open;
var myOpen = function(method, url, async, user, password) {
//call original
this.realOpen (method, url, async, user, password);
myCode();
}
//ensure all XMLHttpRequests use our custom open method
XMLHttpRequest.prototype.open = myOpen ;
}
在我开始使用 GM API 之前,这很有效。当我将以下行添加到元部分时,我的代码会中断,并且myOpen
不再被调用:
// @grant GM_getValue
这可能是任何 GM API,我的代码会中断。即使使用 GM API,我的脚本中的其他所有内容都可以正常工作,只是XMLHttpRequest.prototype.open
函数的重载会中断。
我可以通过使用来解决它waitForKeyElements
,但是,我不喜欢它,因为它使用的时间间隔会减慢浏览器的速度。
任何想法为什么 GM API 会破坏调用的过载XMLHttpRequest.prototype.open
?
非常感谢,
彼得