NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @exclude * // @grant GM.xmlhttpRequest // ==UserLibrary== // @name XHR Hooks // @description XHR 요청을 가로채 사용자 콜백을 실행합니다 // @version 1.0.0 // @author toriato // @copyright 2021, Sangha Lee // @license MIT // @homepageURL https://github.com/toriato/userscripts // @supportURL https://github.com/toriato/userscripts/issues // ==/UserLibrary== // ==/UserScript== XMLHttpRequest.hooks = [] XMLHttpRequest.registerHook = function (filter, callback) { this.hooks.push({ filter, callback }) } XMLHttpRequest.prototype._open = XMLHttpRequest.prototype.open XMLHttpRequest.prototype._send = XMLHttpRequest.prototype.send XMLHttpRequest.prototype.open = function () { this.hooks = [] this.preventDefault = false for (let hook of XMLHttpRequest.hooks) { if (hook.filter.call(this, ...arguments)) { this.hooks.push(hook) } } this._open(...arguments) } XMLHttpRequest.prototype.send = function (data) { for (let { callback } of this.hooks) { data = callback.call(this, data) } if (!this.preventDefault) { this._send(data) } }