JS - 将猴子修补/覆盖的功能恢复为本机代码



我穿过窗户。XMLHttpRequest.prototype.send 已被第三方使用他们自己的函数版本修补/覆盖,该函数拦截了来自我们页面的调用。 作为第一方,我有什么办法可以删除补丁并将功能恢复为本机代码?

没有任何方法可以保证在全局范围内替换某些内容的任意脚本不会有效地阻止此类更改的任何类型的逆转。最好的解决方法可能是防止有问题的代码一开始就运行。如果您仍然对建议的行动方案感到满意,那么我会推荐以下解决方案之一(按顺序尝试(:

解决方案 #1 - 使用Object.defineProperty尝试防止将来更改:

// have this line execute before the offending script does
Object.defineProperty(XMLHttpRequest.prototype, 'send', {
value: XMLHttpRequest.prototype.send,
writable: false
});

解决方案 #2 - 存储对函数的引用,稍后尝试替换它:

// have this line execute before the offending script does
const XMLHTTPRequest_send = XMLHttpRequest.prototype.send;
// have this line execute after
// Object.defineProperty is probably needed if the first solution doesn't work
Object.defineProperty(XMLHttpRequest.prototype, 'send', {
value: XMLHTTPRequest_send
});

这不能保证其他脚本不会准备好再次更改内容。

最新更新