CHROME扩展笔记之监听页面xhr请求

桃扇骨 2022-11-27 12:16 657阅读 0赞

在页面头部加载完时立即注入下面代码,注入完成后如若有xhr请求就可以监听到了

  1. ;(function () {
  2. if ( typeof window.CustomEvent === "function" ) return false;
  3. function CustomEvent ( event, params ) {
  4. params = params || { bubbles: false, cancelable: false, detail: undefined };
  5. var evt = document.createEvent( 'CustomEvent' );
  6. evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
  7. return evt;
  8. }
  9. CustomEvent.prototype = window.Event.prototype;
  10. window.CustomEvent = CustomEvent;
  11. })();
  12. ;(function () {
  13. function ajaxEventTrigger(event) {
  14. var ajaxEvent = new CustomEvent(event, { detail: this });
  15. window.dispatchEvent(ajaxEvent);
  16. }
  17. var oldXHR = window.XMLHttpRequest;
  18. function newXHR() {
  19. var realXHR = new oldXHR();
  20. realXHR.addEventListener('abort', function () { ajaxEventTrigger.call(this, 'ajaxAbort'); }, false);
  21. realXHR.addEventListener('error', function () { ajaxEventTrigger.call(this, 'ajaxError'); }, false);
  22. realXHR.addEventListener('load', function () { ajaxEventTrigger.call(this, 'ajaxLoad'); }, false);
  23. realXHR.addEventListener('loadstart', function () { ajaxEventTrigger.call(this, 'ajaxLoadStart'); }, false);
  24. realXHR.addEventListener('progress', function () { ajaxEventTrigger.call(this, 'ajaxProgress'); }, false);
  25. realXHR.addEventListener('timeout', function () { ajaxEventTrigger.call(this, 'ajaxTimeout'); }, false);
  26. realXHR.addEventListener('loadend', function () { ajaxEventTrigger.call(this, 'ajaxLoadEnd'); }, false);
  27. realXHR.addEventListener('readystatechange', function() { ajaxEventTrigger.call(this, 'ajaxReadyStateChange'); }, false);
  28. let send = realXHR.send;
  29. realXHR.send = function(...arg){
  30. send.apply(realXHR,arg);
  31. realXHR.body = arg[0];
  32. ajaxEventTrigger.call(realXHR, 'ajaxSend');
  33. }
  34. let open = realXHR.open;
  35. realXHR.open = function(...arg){
  36. open.apply(realXHR,arg)
  37. realXHR.method = arg[0];
  38. realXHR.orignUrl = arg[1];
  39. realXHR.async = arg[2];
  40. ajaxEventTrigger.call(realXHR, 'ajaxOpen');
  41. }
  42. let setRequestHeader = realXHR.setRequestHeader;
  43. realXHR.requestHeader = { };
  44. realXHR.setRequestHeader = function(name, value){
  45. realXHR.requestHeader[name] = value;
  46. setRequestHeader.call(realXHR,name,value)
  47. }
  48. return realXHR;
  49. }
  50. window.XMLHttpRequest = newXHR;
  51. })();
  52. var Gpins_data = { };
  53. // 监听页面的ajax
  54. window.addEventListener("ajaxReadyStateChange",function(e){
  55. let xhr = e.detail;
  56. if(xhr.readyState == 4 && xhr.status == 200){
  57. // xhr.getAllResponseHeaders() 响应头信息
  58. // xhr.requestHeader 请求头信息
  59. // xhr.responseURL 请求的地址
  60. // xhr.responseText 响应内容
  61. // xhr.orignUrl 请求的原始参数地址
  62. // xhr.body post参数,(get参数在url上面)
  63. console.log(xhr);
  64. }
  65. });
  66. // console.log({msg:'注入完成',time: (new Date()).valueOf(),data: new Date()});

发表评论

表情:
评论列表 (有 0 条评论,657人围观)

还没有评论,来说两句吧...

相关阅读