javascript - Monkeypatch Javascript 构造函数

标签 javascript xmlhttprequest monkeypatching zip.js

我已经阅读了我能找到的所有其他相关答案,但没有一个有效。本质上,我想制作这个来源: https://github.com/gildas-lormeau/zip.js/blob/master/WebContent/zip-ext.js

在第 93 行向 XMLHttpRequest 添加一些自定义 header 。由于 HTTPRangeReader 包含在匿名函数中,因此我无法直接对其进行 Monkeypatch,这似乎是唯一的选项是对 XMLHttpRequest 构造函数进行 Monkeypatch。我只需要调用默认构造函数,然后在返回新对象之前调用 setRequestHeader() 一次或多次。

最佳答案

使用别名克隆原始文件,然后在方法覆盖中引用它:

    function handler()
      {
      console.log(JSON.stringify(arguments));
      }

    /* Avoid stack overflow */
    if (XMLHttpRequest.prototype.mySetRequestHeader === undefined)
      { 
      XMLHttpRequest.prototype.mySetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;
      }

    /* Override prototype method */
    XMLHttpRequest.prototype.setRequestHeader = function baz(foo, bar)
      {
      XMLHttpRequest.prototype.mySetRequestHeader.call(this, 'foo', 'bar');
      XMLHttpRequest.prototype.mySetRequestHeader.call(this, 'bar', 'baz');
      
      }

    /* Test the override */
    with (new XMLHttpRequest)
      {
      open('GET', location.href);
      setRequestHeader("referer","http://www.example.com");
      send("");
      onreadystatechange = handler;
      }

引用文献

关于javascript - Monkeypatch Javascript 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26637722/

相关文章:

javascript - IE 出现 'focus' 事件问题

javascript - 检测Javascript中两次按键之间的时间间隔

javascript - Access-Control-Allow-Origin 不允许来源

python - 通过猴子修补创建 Python 回调

javascript - React.js 中状态变化时动画组件

具有固定 '@abc.com' 的电子邮件的 JavaScript 正则表达式

php - AJAX 功能在没有警报的情况下不起作用

javascript - 如何制作将 HTML 文件加载到 div 中的 XMLHttpRequest?

jquery - 我可以替换或修改 jQuery UI 小部件上的函数吗?如何? (猴子补丁)

jquery - 有没有办法动态删除或禁用 JavaScript 文件?