mock.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /**
  2. * mock window's console methods(log,info,warn,debug,error) and window.onerror
  3. */
  4. function mockedMethodList () {
  5. const methodList = ['log', 'info', 'warn', 'debug', 'error'];
  6. return methodList;
  7. }
  8. //mock console methods
  9. function mockConsole() {
  10. if(window.adhOriginConsole) {
  11. return;
  12. }
  13. window.adhOriginConsole = {};
  14. var methodList = mockedMethodList();
  15. if(!window.console) {
  16. window.console = {};
  17. }else {
  18. //save origin method
  19. methodList.map(function (method) {
  20. window.adhOriginConsole[method] = window.console[method];
  21. });
  22. }
  23. methodList.map(method => {
  24. window.console[method] = (...args) => {
  25. printLog({
  26. logType: method,
  27. logs: args
  28. });
  29. };
  30. });
  31. }
  32. function mockWindowError() {
  33. if(window.adhOriginOnError) {
  34. return
  35. }
  36. if(window.onerror) {
  37. window.adhOriginOnError = window.onerror;
  38. }
  39. window.onerror = printError;
  40. }
  41. function restoreWindowError() {
  42. window.onerror = window.adhOriginOnError;
  43. }
  44. /**
  45. * @param {String} errorMessage
  46. * @param {String} scriptURI
  47. * @param {Long} lineNumber
  48. * @param {Long} columnNumber
  49. * @param {Object} errorObj
  50. */
  51. function printError(errorMessage, scriptURI, lineNumber,columnNumber) {
  52. var content = '';
  53. content += 'message: ' + errorMessage + '<br/>';
  54. content += 'scriptURI: ' + scriptURI + '<br/>';
  55. content += 'line: ' + lineNumber + '<br/>';
  56. content += 'column: ' + columnNumber;
  57. console.error(content);
  58. }
  59. //restore console methods
  60. function restoreConsole() {
  61. var methodList = mockedMethodList();
  62. methodList.map(function (method) {
  63. window.console[method] = window.adhOriginConsole[method];
  64. });
  65. }
  66. //mocked log
  67. function printLog(item) {
  68. var logType = item.logType;
  69. let logs = item.logs || [];
  70. if (!logs.length) {
  71. return;
  72. }
  73. var content = '';
  74. for (let i = 0; i < logs.length; i++) {
  75. var value = logs[i];
  76. if (typeof(value) == "undefined") {
  77. result = "undefined";
  78. }else if (!value && value!=0) {
  79. result = "null";
  80. }else if(typeof(value) == 'object'){
  81. if(logs.length == 1) {
  82. result = JSON.stringify(value,null,4);
  83. }else {
  84. result = JSON.stringify(value,null);
  85. }
  86. }else {
  87. result = value.toString();
  88. }
  89. content += result;
  90. }
  91. var data = {};
  92. data['logType'] = logType;
  93. data['content'] = content;
  94. // data['date'] = new Date().toString();
  95. //webkit
  96. if(window.webkit) {
  97. if(window.webkit.messageHandlers.wkwebviewjsHandler) {
  98. window.webkit.messageHandlers.wkwebviewjsHandler.postMessage(data);
  99. }
  100. }
  101. //uiwebview
  102. if(window.webviewjsHandler) {
  103. webviewjsHandler(data);
  104. }
  105. }
  106. function adhMock() {
  107. mockConsole();
  108. mockWindowError();
  109. }
  110. adhMock();