libloader

none

  1. // ==UserScript==
  2. // @name libloader
  3. // @version 7
  4. // @description none
  5. // @license GPLv3
  6. // @run-at document-start
  7. // @author rssaromeo
  8. // @tag lib loader
  9. // @match *://*/*
  10. // @include *
  11. // @exclude /^https?:\/\/[^\/]*livereload.net\/files\/ffopen\/index\.html$/
  12. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAAXNSR0IB2cksfwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAHJQTFRFAAAAEIijAo2yAI60BYyuF4WaFIifAY6zBI2wB4usGIaZEYigIoiZCIyrE4igG4iYD4mjEomhFoedCoqpDIqnDomlBYyvE4efEYmiDYqlA42xBoytD4mkCYqqGYSUFYidC4qoC4upAo6yCoupDYqmCYur4zowOQAAACZ0Uk5TAO////9vr////1+/D/+/L+/Pf/////+f3///////H4////////+5G91rAAACgUlEQVR4nM2Y22KjIBCGidg1264liZqDadK03X3/V2wNKHMC7MpF/xthHD5mgERAqZhWhfYqH6K+Qf2qNNf625hCoFj9/gblMUi5q5jLkXLCKudgyiRm0FMK82cWJp1fLbV5VmvJbCIc0GCYaFqqlDJgADdBjncqAXYobm1xh72aFMflbysteFfdy2Yi1XGOm5HGBzQ1dq7TzEoxjeNTjQZb7VA3e1c7+ImgasAgQ9+xusNVNZIo5xmOMgihIS2PbCQIiHEUdTvhxCcS/kPomfFI2zHy2PkWmA6aNatIJpKFJyekyy02xh5Y3DI9T4aOT6VhIUrsNTFp1pf79Z4SIIVDegl6IJO6cHiL/GimIZDhgTu/BlYWCQzHMl0zBWT/T3KAhtxOuUB9FtBrpsz0RV4xsjHmW+UCaffcSy/5viMGer0/6HdFNMZBq/vjJL38H9Dqx4Fuy0Em12DbZy+9pGtiDijbglwAehyj11n0tRD3WUBm+lwulE/8h4BuA+iWAQQnteg2Xm63WQLTpnMnpjdge0Mgu/GRPsV4xdjQ94Lfi624fabhDkfUqIKNrM64Q837v8yL0prasepCgrtvw1sJpoqanGEX7b5mQboNW8eawXaWXTMfMGxub472hzWzHSn6Sg2G9+6TAyRruE71s+zAzjWaknoyJCQzwxrghH2k5FDT4eqWunuNxyN9QCGcxVod5oADbYnIUkDTGZEf1xDJnSFteQ3KdsT8zYDMQXcHxsevcLH1TrsABzkNPyA/L7b0jg704viMMlpQI96WsHknCt/3YH0kOEo9zcGkwrFK39ck72rmoehmKqo2RKlilzSy/nJKEV45CT38myJp456fezktHjN5aeMAAAAASUVORK5CYII=
  13. // @namespace https://gf.qytechs.cn/users/1184528
  14. // @require https://update.gf.qytechs.cn/scripts/491829/1356221/tampermonkey%20storage%20proxy.js
  15. // @grant GM_getValue
  16. // @grant GM_setValue
  17. // @grant GM_registerMenuCommand
  18. // @grant unsafeWindow
  19. // ==/UserScript==
  20.  
  21. ;(async () => {
  22. try {
  23. unsafeWindow
  24. } catch (e) {
  25. unsafeWindow = window
  26. }
  27. var err
  28. var sp
  29. const loadedscripts = {
  30. libloader: {
  31. savelib,
  32. loadlib,
  33. waitforlib,
  34. // requirescript, //for saying that a certan script should've been loaded by the time this function was called
  35. },
  36. }
  37. var menus = []
  38. async function waitforlib(name) {
  39. return new Promise((done) => {
  40. if (loadedscripts[name]) return done()
  41. var int = setInterval(() => {
  42. if (loadedscripts[name]) return done(clearInterval(int))
  43. })
  44. })
  45. }
  46. function loadlib(name, filename = "unset") {
  47. // if (err) throw new Error(err)
  48. name = name.replace(/\.js$/, "")
  49. if (!loadedscripts[name]) {
  50. err ??= `{${filename}} script "${name}" hasn't been loaded`
  51. log({ ...loadedscripts }, loadedscripts)
  52. throw new Error(err)
  53. }
  54. return loadedscripts[name]
  55. }
  56. // function getfilename() {
  57. // var scripts = document.getElementsByTagName("script")
  58. // var src = scripts[scripts.length - 1].src
  59. // src = src.replaceAll(/%\d\d/g, "")
  60. // if (src.startsWith("blob:")) return src.match(/[\w\d._]+\.js(?!\w)/)[0]
  61. // return src.match(/\/[^\/]\.js$/)[0]
  62. // }
  63.  
  64. function savelib(name, obj, liboptions, filename) {
  65. filename ??= name
  66. name = name.replace(/\.js$/, "")
  67. if (Object.prototype.toString.call(obj) === "[object Object]") {
  68. if (!loadedscripts[name]) loadedscripts[name] = {}
  69. Object.assign(loadedscripts[name], obj)
  70. } else {
  71. if (loadedscripts[name]) {
  72. if (
  73. Object.prototype.toString.call(loadedscripts[name]) ===
  74. "[object Object]"
  75. ) {
  76. err ??= `{${filename}} script with name "${name}" was allready loaded as an object`
  77. throw new Error(err)
  78. } else {
  79. err ??= `{${filename}} script with name "${name}" was allready loaded`
  80. throw new Error(err)
  81. }
  82. }
  83. loadedscripts[name] = obj
  84. }
  85. }
  86. Object.assign(unsafeWindow, {
  87. loadlib,
  88. })
  89. })()

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址