ExplicitMessage_Inject

[DEBUG] 信息显式化(注入版)

Este script não deve ser instalado diretamente. Este script é uma biblioteca de outros scripts para incluir com o diretório meta // @require https://update.greasyfork.org/scripts/429525/1140726/ExplicitMessage_Inject.js

  1. /**
  2. * ExplicitMessage_Inject
  3. * @file [DEBUG] 信息显式化(注入版)
  4. * @version 1.6.0.20230121
  5. * @author Laster2800
  6. */
  7.  
  8. (function() {
  9. 'use strict'
  10.  
  11. const win = typeof unsafeWindow === 'object' ? unsafeWindow : window
  12. const m = win[Symbol.for('ExplicitMessage')]
  13. if (!m?.fn?.wrappedLog) return
  14. if (typeof unsafeWindow !== 'object') {
  15. m.fn.explicit('注入版不支持 @grant none 脚本。此类脚本的日志使用主版本即可捕获。')
  16. return
  17. }
  18. let updateAlerted = false
  19. const injectVersion = 20230121
  20. const cs = console
  21. const fn = {}
  22. for (const k of ['log', 'debug', 'info', 'warn', 'error']) {
  23. const log = cs[k]
  24. fn[k] = (...args) => { // 首次执行进行初始化
  25. if (injectVersion !== m.injectUpdate) {
  26. if (!updateAlerted) {
  27. updateAlerted = true
  28. m.fn.updateCheck?.(GM_info.script.name, injectVersion > m.injectUpdate)
  29. }
  30. fn[k] = log
  31. } else {
  32. // 替换初始化方法,以后执行直接调用封装日志方法
  33. fn[k] = m.fn.wrappedLog(cs, log, k.toUpperCase(), GM_info.script.name)
  34. }
  35. Reflect.apply(fn[k], cs, args)
  36. }
  37. }
  38.  
  39. // 日志方法可能会被包括脚本管理器在内的第三方定义为 configurable: false 属性,
  40. // 因而只能采取最稳定可靠的 Proxy 方案。
  41. // 此处 console(至少)是脚本管理器提供的代理控制台对象,并非全局 console。
  42. // eslint-disable-next-line no-global-assign
  43. console = new Proxy(cs, { get: (o, p) => (p in fn ? fn[p] : o[p]) })
  44. })()