//// firefox, ie8+//var accessor = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, 'responseText');Object.defineProperty(XMLHttpRequest.prototype, 'responseText', { get: function() { console.log('get responseText'); return accessor.get.call(this); }, set: function(str) { console.log('set responseText: %s', str); //return accessor.set.call(this, str); }, configurable: true});//// chrome, safari (accessor == null)//var rawOpen = XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open = function() { if (!this._hooked) { this._hooked = true; setupHook(this); } rawOpen.apply(this, arguments);}function setupHook(xhr) { function getter() { console.log('get responseText'); delete xhr.responseText; var ret = xhr.responseText; setup(); return ret; } function setter(str) { console.log('set responseText: %s', str); } function setup() { Object.defineProperty(xhr, 'responseText', { get: getter, set: setter, configurable: true }); } setup();}