Estoy trabajando en esta aplicación que es una especie de complemento que está incrustado en un sitio web para rastrear los cambios del sitio web. Lo usamos para anular la implementación del prototipo de enviar y buscar de la siguiente manera. Luego, un fragmento de código que se parece a esto.
var v = window.XMLHttpRequest.prototype.send; window.XMLHttpRequest.prototype.send = function (w) { this.addEventListener("load", function (T) { // custom logic }); return v.apply(this, arguments) } Esto funciona como pan comido para muchos clientes, pero para uno nos enfrentamos a un problema en el que el depurador no alcanza el fragmento de código anterior, lo que resulta en una falla al establecer la lógica personalizada.
En una depuración adicional, notamos que el cliente también anula el método XMLHttpRequest.prototype.open y tiene una lógica personalizada para enviar estos datos a su CRM/webhook interno.
Esta es su implementación.
const open = window.XMLHttpRequest.prototype.open; function customActivityHandler() { this.addEventListener("load", function () { // custom logic log_custom_activity_event({}) return open.apply(this, arguments); } window.XMLHttpRequest.prototype.open = customActivityHandler; function log_custom_activity_event(requestBody) { let url = "https://aws.lambda.com/webhook"; let dataBody = { method: "POST", body: JSON.stringify(requestBody) } fetch(url,dataBody); }Este paso es muy crucial para mí.
Por casualidad, cuando el cliente implementa su customHandler para abrir, ¿elimina la referencia a otra implementación? Si ese es el caso, ¿cómo puedo solucionar esto para que incluso se aplique mi lógica personalizada? Cualquier cosa sobre esto será útil.