Monkey-patching XMLHttpRequest.send 特殊 url

Monkey-patching XMLHttpRequest.send for special url

我正在尝试创建一个 http-interceptor,它将允许将 header 添加到从 third-party 应用内发送的请求。我是 monkey-patching XMLHttpRequest.send

const origSend = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
    this.setRequestHeader("A-Header", "Value");
    return origSend.apply(this, [].slice.call(arguments));
};

问题是我在其他请求中不需要 header,但我仍然不知道如何访问请求 url(检查请求是否来自 third-party 库)。我怎样才能让这个拦截器只在 url?

中有子字符串的情况下工作

如果你也猴子修补.open()方法,你可以将传递的url存储在实例中并稍后读取:

const origOpen = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
  this.url = arguments[1];
  return origOpen.apply(this, [].slice.call(arguments));
};

const origSend = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
  if (this.url) {
    console.log("url found:", this.url);
      this.setRequestHeader("A-Header", "Value");
  }
  // prevent error in snippet, uncomment next line
  // return origSend.apply(this, [].slice.call(arguments));
};

const xhr = new XMLHttpRequest();
xhr.open("get", "https://whosebug.com");
xhr.send();