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.