AjaxListener

AjaxListener, events: onOpen, onSend, onCallback

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/12135/71713/AjaxListener.js

  1. var ajaxListener = new Object();
  2. if (typeof XMLHttpRequest === "undefined") {
  3. XMLHttpRequest = function () {
  4. try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
  5. catch (e) { }
  6. try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
  7. catch (e) { }
  8. try { return new ActiveXObject("Microsoft.XMLHTTP"); }
  9. catch (e) { }
  10. throw new Error("This browser does not support XMLHttpRequest.");
  11. };
  12. }
  13. ajaxListener.open = XMLHttpRequest.prototype.open;
  14. ajaxListener.send = XMLHttpRequest.prototype.send;
  15.  
  16. ajaxListener.onOpen = function (method, url, async, user, password) { };
  17. ajaxListener.onSend = function (data, arg) { };
  18. ajaxListener.onCallback = function () { };
  19.  
  20. XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
  21. ajaxListener.xhr = this;
  22. ajaxListener.method = method;
  23. ajaxListener.url = url;
  24. ajaxListener.async = async;
  25. ajaxListener.user = user;
  26. ajaxListener.password = password;
  27. if (method.toLowerCase() == "get") {
  28. ajaxListener.data = user.split("?");
  29. ajaxListener.data = ajaxListener.data[1];
  30. }
  31. if (typeof ajaxListener.onOpen == "function") {
  32. ajaxListener.onOpen(method, url, async, user, password);
  33. for (var i = 0; i < arguments.length; i++) {
  34. switch (i) {
  35. case 0: arguments[i] = ajaxListener.method; break;
  36. case 1: arguments[i] = ajaxListener.url; break;
  37. case 2: arguments[i] = ajaxListener.async; break;
  38. case 3: arguments[i] = ajaxListener.user; break;
  39. case 4: arguments[i] = ajaxListener.password; break;
  40. }
  41. }
  42. }
  43. ajaxListener.open.apply(this, arguments);
  44. };
  45.  
  46. XMLHttpRequest.prototype.send = function (data, arg) {
  47. if (ajaxListener.method.toLowerCase() == "post")
  48. ajaxListener.data = data;
  49. ajaxListener.arg = arg;
  50. if (typeof ajaxListener.onSend == "function") {
  51. ajaxListener.onSend(data, arg);
  52. for (var i = 0; i < arguments.length; i++) {
  53. switch (i) {
  54. case 0: arguments[i] = ajaxListener.data; break;
  55. case 1: arguments[i] = ajaxListener.arg; break;
  56. }
  57. }
  58. }
  59.  
  60. ajaxListener.onreadystatechange = this.onreadystatechange;
  61. this.onreadystatechange = function () {
  62. ajaxListener.onreadystatechange.apply(this);
  63. if (this.readyState == 4
  64. && typeof ajaxListener.onCallback == "function")
  65. ajaxListener.onCallback();
  66. };
  67.  
  68. ajaxListener.send.apply(this, arguments);
  69. };