您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically completes SCORM sections and shows logs in a non-blocking popup
// ==UserScript== // @name Autocomplete_Moodle_section_SCORM // @version 1.3.4 // @description Automatically completes SCORM sections and shows logs in a non-blocking popup // @author ElenaCorner // @match https://*/scorm/* // @grant none // @run-at document-end // @license MIT // @namespace https://greasyfork.org/users/1429342 // ==/UserScript== (function completeCourse(win) { let logMessages = []; // Array per memorizzare i log delle funzioni di completamento function createPopup() { let popup = document.createElement("div"); popup.id = "scorm-popup"; popup.style.position = "fixed"; popup.style.bottom = "20px"; popup.style.right = "20px"; popup.style.background = "rgba(0, 0, 0, 0.8)"; popup.style.color = "#fff"; popup.style.padding = "15px"; popup.style.borderRadius = "8px"; popup.style.fontSize = "14px"; popup.style.zIndex = "9999"; popup.style.maxWidth = "250px"; popup.style.boxShadow = "0px 4px 8px rgba(0, 0, 0, 0.2)"; popup.style.display = "none"; // Inizialmente nascosto let closeButton = document.createElement("span"); closeButton.innerHTML = "✖"; closeButton.style.position = "absolute"; closeButton.style.top = "5px"; closeButton.style.right = "10px"; closeButton.style.cursor = "pointer"; closeButton.style.fontSize = "16px"; closeButton.onclick = function () { popup.style.display = "none"; // Nasconde il popup }; popup.appendChild(closeButton); document.body.appendChild(popup); return popup; } function showPopupLog() { if (logMessages.length > 0) { let popup = document.getElementById("scorm-popup") || createPopup(); popup.innerHTML = logMessages.join("<br>"); // Inserisce i messaggi popup.appendChild(popup.firstChild); // Mantiene il pulsante di chiusura popup.style.display = "block"; // Mostra il popup } } function logMessage(message) { console.log(message); logMessages.push(message); showPopupLog(); } function completeScorm2004(api) { api.SetValue("cmi.completion_status", "completed"); api.Commit(""); api.Terminate(""); logMessage("✅ section completed"); } function completeScorm12(api) { api.LMSSetValue("cmi.core.lesson_status", "completed"); api.LMSCommit(""); api.LMSFinish(""); logMessage("✅ section completed"); } function findScormAPI(win) { if (win.API_1484_11) { completeScorm2004(win.API_1484_11); } else if (win.API) { completeScorm12(win.API); } } // Esegui la funzione automaticamente dopo 10 secondi setTimeout(() => findScormAPI(win), 10000); })(window);