# Javascript 通过脚本注入获取 XHR 请求数据

使用场景 : 油猴脚本获取网页自身请求内容,避免多次请求。

来源: Stack Overflow

// subject 用于rxjs 主题订阅。
(function(subject) {
  let rawOpen = XMLHttpRequest.prototype.open;
  let arg = null;
  XMLHttpRequest.prototype.open = function() {
    arg = arguments;
    if (!this._hooked) {
      this._hooked = true;
      setupHook(this);
    }
    rawOpen.apply(this, arguments);
  };
  // 添加hook获取内容
  function setupHook(xhr) {
    function getter() {
      // 删除 getter, 非删除属性。避免调用死循环
      delete xhr.responseText;
      let ret = xhr.responseText;
      //   console.log(ret);
      subject.next({ request: arg, response: ret });
      setup();
      return ret;
    }

    function setter(str) {
      console.log('set responseText: %s', str);
    }
    function setup() {
      Object.defineProperty(xhr, 'responseText', {
        get: getter,
        set: setter,
        configurable: true,
      });
    }
    setup();
  }
})(subject);
上次更新: 7/28/2020, 2:01:43 PM