Как исправить `TypeError: Illegal Invocation` в XMLHttpRequest, обернутом в прокси ES6 - PullRequest
1 голос
/ 25 октября 2019

Я пишу прокси для XMLHttpRequest s, чтобы заставить их вернуть определенный код состояния. Я могу запускать функции на прокси, но установка завершается с ошибкой TypeError: Illegal Invocation. В приведенном ниже примере это происходит в строке oReq.responseType = "json";. Это работает, если эта строка удалена, но мне нужно иметь возможность установить свойства XHR.

XMLHttpRequest = new Proxy(XMLHttpRequest, {
  construct:function(t,a){
    const req = new t();
    return new Proxy(req, {
      get:function(o,p){
        if(p=='status')return 9001
        return typeof o[p] == 'function'?o[p].bind(o):o[p]
      },
      set: function(target, prop, value, receiver) {
        Reflect.set(target, prop, value, receiver)
        return true;
      },
    })
  }
})

var oReq = new XMLHttpRequest();

oReq.addEventListener("load", transferComplete);
oReq.addEventListener("error", transferComplete);

oReq.open("GET", "https://blossom-emery.glitch.me/yo.json");
oReq.responseType = "json"; // TypeError: Illegal Invocation
oReq.send()

console.log(oReq)

function transferComplete(evt) {
  console.log(evt);
  console.log(oReq.status,oReq.response);
}

...