Numerade Video Viewer

[MOVED] The userscript has moved to Discord. Join us there for continued access!

  1. // ==UserScript==
  2. // @name Numerade Video Viewer
  3. // @namespace https://github.com/GooglyBlox/free-numerade-videos
  4. // @version 1.9
  5. // @description [MOVED] The userscript has moved to Discord. Join us there for continued access!
  6. // @author GooglyBlox
  7. // @match https://www.numerade.com/questions/*
  8. // @match https://www.numerade.com/ask/question/*
  9. // @icon https://raw.githubusercontent.com/GooglyBlox/free-numerade-videos/main/no-more-numerade.ico
  10. // @grant GM_xmlhttpRequest
  11. // @connect cdn.numerade.com
  12. // @license CC-BY-NC-SA-4.0; https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode
  13. // @license MIT
  14. // ==/UserScript==
  15.  
  16. (function() {
  17. 'use strict';
  18.  
  19. const styles = `
  20. .numerade-archive-overlay {
  21. position: fixed;
  22. top: 0;
  23. left: 0;
  24. width: 100%;
  25. height: 100%;
  26. background: rgba(0, 0, 0, 0.7);
  27. z-index: 999999;
  28. display: flex;
  29. justify-content: center;
  30. align-items: center;
  31. }
  32.  
  33. .numerade-archive-popup {
  34. background: white;
  35. padding: 2rem;
  36. border-radius: 10px;
  37. max-width: 500px;
  38. width: 90%;
  39. position: relative;
  40. box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  41. font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
  42. }
  43.  
  44. .numerade-archive-title {
  45. font-size: 1.5rem;
  46. font-weight: bold;
  47. color: #5865F2;
  48. margin-bottom: 1rem;
  49. display: flex;
  50. align-items: center;
  51. gap: 0.5rem;
  52. }
  53.  
  54. .numerade-archive-content {
  55. color: #2c3e50;
  56. line-height: 1.6;
  57. margin-bottom: 1.5rem;
  58. }
  59.  
  60. .numerade-archive-info {
  61. background: #e3f2fd;
  62. border-left: 4px solid #5865F2;
  63. padding: 1rem;
  64. margin: 1rem 0;
  65. color: #1a237e;
  66. }
  67.  
  68. .numerade-archive-button {
  69. background: #5865F2;
  70. color: white;
  71. border: none;
  72. padding: 0.75rem 1.5rem;
  73. border-radius: 5px;
  74. cursor: pointer;
  75. font-size: 1rem;
  76. transition: background 0.3s ease;
  77. width: 100%;
  78. }
  79.  
  80. .numerade-archive-button:hover {
  81. background: #4752C4;
  82. }
  83.  
  84. .discord-link {
  85. color: #5865F2;
  86. text-decoration: none;
  87. font-weight: bold;
  88. }
  89.  
  90. .discord-link:hover {
  91. text-decoration: underline;
  92. }
  93. `;
  94.  
  95. function createPopup() {
  96. const styleElement = document.createElement('style');
  97. styleElement.textContent = styles;
  98. document.head.appendChild(styleElement);
  99.  
  100. const overlay = document.createElement('div');
  101. overlay.className = 'numerade-archive-overlay';
  102.  
  103. const popup = document.createElement('div');
  104. popup.className = 'numerade-archive-popup';
  105.  
  106. popup.innerHTML = `
  107. <div class="numerade-archive-title">
  108. <span>🎉 We've Moved to Discord!</span>
  109. </div>
  110. <div class="numerade-archive-content">
  111. <p>The Numerade Video Viewer project is still alive and active, but we've moved to a new home!</p>
  112.  
  113. <div class="numerade-archive-info">
  114. <strong>Good news:</strong> Join our Discord server to continue accessing Numerade videos for free!
  115. <p style="margin-top: 0.5rem;">
  116. <a href="https://discord.gg/D6D27pAs62" target="_blank" class="discord-link">➡️ Click here to join our Discord server</a>
  117. </p>
  118. </div>
  119.  
  120. <p><strong>What to do now:</strong></p>
  121. <ol>
  122. <li>Uninstall this userscript as it's no longer needed</li>
  123. <li>Join our Discord server using the link above</li>
  124. <li>Use our Discord bot to access videos!</li>
  125. </ol>
  126. </div>
  127. <button class="numerade-archive-button">Got it, thanks!</button>
  128. `;
  129.  
  130. const closeButton = popup.querySelector('.numerade-archive-button');
  131. closeButton.addEventListener('click', () => {
  132. overlay.remove();
  133. });
  134.  
  135. overlay.appendChild(popup);
  136. document.body.appendChild(overlay);
  137. }
  138.  
  139. window.addEventListener('load', createPopup);
  140. })();

QingJ © 2025

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