Monkey-patching XMLHttpRequest.send 特殊 url
Monkey-patching XMLHttpRequest.send for special url
我正在尝试创建一个 http-interceptor,它将允许将 header 添加到从 third-party 应用内发送的请求。我是 monkey-patching XMLHttpRequest.send
const origSend = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
this.setRequestHeader("A-Header", "Value");
return origSend.apply(this, [].slice.call(arguments));
};
问题是我在其他请求中不需要 header,但我仍然不知道如何访问请求 url(检查请求是否来自 third-party 库)。我怎样才能让这个拦截器只在 url?
中有子字符串的情况下工作
如果你也猴子修补.open()
方法,你可以将传递的url存储在实例中并稍后读取:
const origOpen = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
this.url = arguments[1];
return origOpen.apply(this, [].slice.call(arguments));
};
const origSend = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
if (this.url) {
console.log("url found:", this.url);
this.setRequestHeader("A-Header", "Value");
}
// prevent error in snippet, uncomment next line
// return origSend.apply(this, [].slice.call(arguments));
};
const xhr = new XMLHttpRequest();
xhr.open("get", "https://whosebug.com");
xhr.send();
我正在尝试创建一个 http-interceptor,它将允许将 header 添加到从 third-party 应用内发送的请求。我是 monkey-patching XMLHttpRequest.send
const origSend = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
this.setRequestHeader("A-Header", "Value");
return origSend.apply(this, [].slice.call(arguments));
};
问题是我在其他请求中不需要 header,但我仍然不知道如何访问请求 url(检查请求是否来自 third-party 库)。我怎样才能让这个拦截器只在 url?
中有子字符串的情况下工作如果你也猴子修补.open()
方法,你可以将传递的url存储在实例中并稍后读取:
const origOpen = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
this.url = arguments[1];
return origOpen.apply(this, [].slice.call(arguments));
};
const origSend = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
if (this.url) {
console.log("url found:", this.url);
this.setRequestHeader("A-Header", "Value");
}
// prevent error in snippet, uncomment next line
// return origSend.apply(this, [].slice.call(arguments));
};
const xhr = new XMLHttpRequest();
xhr.open("get", "https://whosebug.com");
xhr.send();