Javascript: Remplacer XMLHttpRequest.open ()

Comment pourrais-je remplacer la méthode XMLHttpRequest.open() , puis attraper et modifier ses arguments?

J'ai déjà essayé la méthode proxy, mais cela ne fonctionnait pas, bien que la suppression de l'ouverture sur-débarrasse lorsque XMLHttpRequest() était appelé:

 (function() { var proxied = window.XMLHttpRequest.open; window.XMLHttpRequest.open = function() { $('.log').html(arguments[0]); return proxied.apply(this, arguments); }; })(); 

Vous ne modifiez pas la méthode open héritée par les XMLHttpRequest objects mais simplement l'ajout d'une méthode au XMLHttpRequest constructor qui n'est jamais utilisé.

J'ai essayé ce code dans Facebook et j'ai pu prendre les requêtes:

 (function() { var proxied = window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open = function() { console.log( arguments ); return proxied.apply(this, [].slice.call(arguments)); }; })(); /* ["POST", "/ajax/chat/buddy_list.php?__a=1", true] ["POST", "/ajax/apps/usage_update.php?__a=1", true] ["POST", "/ajax/chat/buddy_list.php?__a=1", true] ["POST", "/ajax/canvas_ticker.php?__a=1", true] ["POST", "/ajax/canvas_ticker.php?__a=1", true] ["POST", "/ajax/chat/buddy_list.php?__a=1", true] */ 

Donc oui, la méthode ouverte doit être ajoutée au XMLHttpRequest prototype (window.XMLHttpRequest.prototype) et non au XMLHttpRequest constructor (window.XMLHttpRequest)

Je donnerais un coup d'oeil au projet xmlhttprequest au google code. C'est un très bon exemple de suppression correcte de l'objet XMLHttpRequest. La source peut être vue ici .

Utilisez plutôt XMLHttpRequest.prototype.open.