在装饰XMLHttpRequest的onreadystatechange方法的函数中获取URL

问题描述 投票:0回答:1

我需要为项目中使用 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
(请参阅上面的代码)

javascript xmlhttprequest
1个回答
1
投票

您可以重写

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
属性。

© www.soinside.com 2019 - 2024. All rights reserved.