Estoy tratando de crear un interceptor http que permita agregar un encabezado a las solicitudes enviadas desde una aplicación de terceros. Estoy parcheando 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)); };El problema es que no necesito ese encabezado en otras solicitudes, aún no veo cómo puedo acceder a la URL de la solicitud (para verificar si la solicitud se realiza desde una biblioteca de terceros). ¿Cómo puedo hacer que este interceptor funcione solo en caso de que haya una subcadena en la URL?
Si también parchea el método .open() , puede almacenar la URL pasada en la instancia y leerla más tarde:
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://stackoverflow.com"); xhr.send();