How to intercept all AJAX requests made by different JS libraries
Solution 1:
This type of function hooking is perfectly safe and is done regularly on other methods for other reasons.
And, the only performance impact is really only one extra function call for each .open()
plus whatever code you execute yourself which is probably immaterial when a networking call is involved.
In IE, this won't catch any code that tries to use the ActiveXObject
control method of doing Ajax. Well written code looks first for the XMLHttpRequest
object and uses that if available and that has been available since IE 7. But, there could be some code that uses the ActiveXObject
method if it's available which would be true through much later versions of IE.
In modern browsers, there are other ways to issue Ajax calls such as the fetch()
interface so if one is looking to hook all Ajax calls, you have to hook more than just XMLHttpRequest
.
Solution 2:
This won't catch XMLHttpRequests for some versions of IE (9 and below). Depending upon the library, they may look for IE's proprietary ActiveX control first.
And, of course, all bets are off if you are using a non-strict DOCTYPE under IE, but I'm sure you knew that.
Reference: CanIuse