debug

用于调试的脚本库

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

  1. // ==UserScript==
  2. // @name debug
  3. // @namespace https://github.com/yeomanye
  4. // @version 0.1.1
  5. // @include *://*
  6. // @description 用于调试的脚本库
  7. // @author Ming Ye
  8. // ==/UserScript==
  9.  
  10. (function(context) {
  11. var defaultEnable = true;
  12.  
  13. /**
  14. * 创建分组调试函数的函数
  15. * @param {string} namespace 命名空间
  16. * @param styleStr
  17. * @param {string} type 日志类型
  18. * @param {bool} enable 调试模式
  19. */
  20. function consoleFactory(namespace, styleStr, type, enable) {
  21. var empty = () => {},
  22. log;
  23. type = type || 'log';
  24. enable = enable || defaultEnable;
  25. var prevTime;
  26. /**
  27. * 创建的分组打印日志
  28. * @param {bool} enable 是否启用日志
  29. */
  30. log = function() {
  31. if (log.enable) {
  32. var argArr = Array.prototype.slice.apply(arguments);
  33.  
  34. var caller;
  35. try {
  36. caller = arguments.callee.caller.name;
  37. } catch (e) {}
  38. caller = caller || '_caller'; //赋予默认值
  39. var prefix = '%c' + namespace + ': %c——' + caller + '—— %c';
  40. var cur = Date.now();
  41. prevTime = prevTime || cur;
  42. var diff = cur - prevTime;
  43. prevTime = cur;
  44.  
  45. createArgs(prefix, diff, styleStr, argArr);
  46.  
  47.  
  48. //添加命名空间样式
  49. // argArr.splice(1,0,styleStr);
  50. console[type].apply(null, argArr);
  51. }
  52. };
  53. log.enable = enable;
  54.  
  55. /**
  56. * 打印对象
  57. * @param {string} desc 对象描述
  58. * @param {object} obj 对象数据
  59. */
  60. log.logObj = function(desc, obj) {
  61. if (log.enable) {
  62. var argArr = [].slice.call(arguments);
  63. var desc = argArr.shift();
  64. argArr.unshift('color:green');
  65. var caller;
  66. try {
  67. caller = arguments.callee.caller.name;
  68. } catch (e) {}
  69. caller = caller || 'caller_';
  70. argArr.unshift(`${caller}:%c[${desc}]`);
  71.  
  72. console[type].apply(console, argArr);
  73. }
  74. };
  75. /**
  76. * 强调打印,用于结论等重要场合
  77. * @param {string} desc 打印内容
  78. * @param bgColor
  79. */
  80. log.em = function(desc, bgColor) {
  81. if (log.enable) {
  82. var caller;
  83. try {
  84. caller = arguments.callee.caller.name;
  85. } catch (e) {}
  86. caller = caller || '_caller';
  87. bgColor = bgColor || 'green';
  88. console[type](`%c${caller}:${desc}`, `font-size:18px;background-color:${bgColor};color:white;padding:4px`);
  89. }
  90. };
  91. return log;
  92. }
  93.  
  94. function createArgs(prefix, diff, styleStr, argArr) {
  95. var formatStr = prefix;
  96. for (var i = 0, len = argArr.length; i < len; i++) {
  97. var arg = argArr[i];
  98. var argType = typeof arg;
  99. switch (argType) {
  100. case 'string':
  101. formatStr += '%s ';
  102. break;
  103. case 'number':
  104. formatStr += '%d ';
  105. break;
  106. case 'object':
  107. formatStr += '%o ';
  108. break;
  109. }
  110. }
  111. formatStr += '%c +' + diff + 'ms';
  112. argArr.splice(0, 0, formatStr, styleStr, 'font-weight:bold;', 'color:black;');
  113. argArr.push(styleStr);
  114. }
  115.  
  116. // 当参数为true时开启调试
  117. var debugTrue = function(enable) {
  118. enable = (enable === undefined) ? myDebugger.enable : defaultEnable;
  119. if (enable) debugger;
  120. }
  121.  
  122. var myDebugger = {
  123. consoleFactory: consoleFactory,
  124. debugTrue: debugTrue,
  125. enable: defaultEnable
  126. };
  127.  
  128. context.myDebugger = myDebugger;
  129.  
  130. })(window);