🏠 Home 

ExplicitMessage_Inject

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

สคริปต์นี้ไม่ควรถูกติดตั้งโดยตรง มันเป็นคลังสำหรับสคริปต์อื่น ๆ เพื่อบรรจุด้วยคำสั่งเมทา // @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. (function() {
  8. 'use strict'
  9. const win = typeof unsafeWindow === 'object' ? unsafeWindow : window
  10. const m = win[Symbol.for('ExplicitMessage')]
  11. if (!m?.fn?.wrappedLog) return
  12. if (typeof unsafeWindow !== 'object') {
  13. m.fn.explicit('注入版不支持 @grant none 脚本。此类脚本的日志使用主版本即可捕获。')
  14. return
  15. }
  16. let updateAlerted = false
  17. const injectVersion = 20230121
  18. const cs = console
  19. const fn = {}
  20. for (const k of ['log', 'debug', 'info', 'warn', 'error']) {
  21. const log = cs[k]
  22. fn[k] = (...args) => { // 首次执行进行初始化
  23. if (injectVersion !== m.injectUpdate) {
  24. if (!updateAlerted) {
  25. updateAlerted = true
  26. m.fn.updateCheck?.(GM_info.script.name, injectVersion > m.injectUpdate)
  27. }
  28. fn[k] = log
  29. } else {
  30. // 替换初始化方法,以后执行直接调用封装日志方法
  31. fn[k] = m.fn.wrappedLog(cs, log, k.toUpperCase(), GM_info.script.name)
  32. }
  33. Reflect.apply(fn[k], cs, args)
  34. }
  35. }
  36. // 日志方法可能会被包括脚本管理器在内的第三方定义为 configurable: false 属性,
  37. // 因而只能采取最稳定可靠的 Proxy 方案。
  38. // 此处 console(至少)是脚本管理器提供的代理控制台对象,并非全局 console。
  39. // eslint-disable-next-line no-global-assign
  40. console = new Proxy(cs, { get: (o, p) => (p in fn ? fn[p] : o[p]) })
  41. })()