LINUX.ORG.RU

История изменений

Исправление Goganchic, (текущая версия) :

а разве send не асинхронный? т.е. после вызова оригинального send ничего ж не поменяется сразу, а при изменении состояния приходит колбек onreadystatechange. Его и надо менять. Например так:

function setXMLRequestCallback(callback) {
  XMLHttpRequest.callback = callback;
  const oldSend = XMLHttpRequest.prototype.send;
  XMLHttpRequest.prototype.send = function () {
  const origCallback = this.onreadystatechange;
  this.onreadystatechange = () => {
    XMLHttpRequest.callback({
      status: this.status,
      url: this.responseURL,
      text: this.responseText,
      object: this
    });
  }
  oldSend.apply(this, arguments);
}

Исходная версия Goganchic, :

а разве send не асинхронный? т.е. после вызова оригинального send ничего ж не поменяется сразу, а при изменении состояния приходит колбек onreadystatechange. Его и надо менять. Например так:

function setXMLRequestCallback(callback) {
  let oldSend;

  XMLHttpRequest.callback = callback;
  const oldSend = XMLHttpRequest.prototype.send;
  XMLHttpRequest.prototype.send = function () {
  const origCallback = this.onreadystatechange;
  this.onreadystatechange = () => {
    XMLHttpRequest.callback({
      status: this.status,
      url: this.responseURL,
      text: this.responseText,
      object: this
    });
  }
  oldSend.apply(this, arguments);
}