我已经阅读了我能找到的所有其他相关答案,但没有一个有效。本质上,我想制作这个来源: https://github.com/gildas-lormeau/zip.js/blob/master/WebContent/zip-ext.js
在第 93 行向 XMLHttpRequest
添加一些自定义 header 。由于 HTTPRangeReader
包含在匿名函数中,因此我无法直接对其进行 Monkeypatch,这似乎是唯一的选项是对 XMLHttpRequest
构造函数进行 Monkeypatch。我只需要调用默认构造函数,然后在返回新对象之前调用 setRequestHeader()
一次或多次。
最佳答案
使用别名克隆原始文件,然后在方法覆盖中引用它:
function handler()
{
console.log(JSON.stringify(arguments));
}
/* Avoid stack overflow */
if (XMLHttpRequest.prototype.mySetRequestHeader === undefined)
{
XMLHttpRequest.prototype.mySetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;
}
/* Override prototype method */
XMLHttpRequest.prototype.setRequestHeader = function baz(foo, bar)
{
XMLHttpRequest.prototype.mySetRequestHeader.call(this, 'foo', 'bar');
XMLHttpRequest.prototype.mySetRequestHeader.call(this, 'bar', 'baz');
}
/* Test the override */
with (new XMLHttpRequest)
{
open('GET', location.href);
setRequestHeader("referer","http://www.example.com");
send("");
onreadystatechange = handler;
}
引用文献
关于javascript - Monkeypatch Javascript 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26637722/