我需要为项目中使用 XMLHttpRequest 发送的所有请求添加一个特殊的标头。我通过装饰
onreadystatechange
XMLHttpRequest 的方法来实现这一点:
XMLHttpRequest = new Proxy(XMLHttpRequest, {
construct: function (target, args) {
const xhr = new target(...args);
xhr.onreadystatechange = function () {
if (xhr.readyState === 1) {
xhr.setRequestHeader('header name', 'header value');
}
};
return xhr;
},
});
但事实证明我不需要对所有网址都这样做。我需要确定 url 是否满足某些要求。如果是,则向请求添加标头,否则不更改请求。 如果有一种方法可以在覆盖该方法的函数内获取正在发出请求的 url
onreadystatechange
(请参阅上面的代码)
您可以重写
XMLHttpRequest.prototype.send
方法,并在调用该方法时将 url 与 XMLHttpRequest 实例一起保存。 send
方法似乎是向 XHR 实例提供 url 的唯一方法。
__originMethod = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url, ...args) {
this.__url = url; //save the url into the instance
__originMethod.call(this, method, url, ...args);
}
然后您可以访问 xhr 实例上的
__url
属性。