Script listo para producción
Script Anti-Copia Inteligente para Moodle
Bloquea a estudiantes. Se desactiva solo para ti. Sin configuración extra.
Este script es la versión inteligente: le da 1,5 segundos a Moodle para cargar tu interfaz,
busca la palabra "Administración del sitio" (en español o inglés) o tus selectores de edición,
y si te detecta como Manager o Admin, se apaga por completo para que trabajes libre.
Si entra un estudiante, activa todos los bloqueos en milisegundos.
¿Qué hace exactamente?
Espera 1,5 seg.
Da margen a Moodle para renderizar menús asincrónicos antes de evaluar el rol.
Detecta Admin
Busca "Administración del sitio", selectores de edición y M.cfg.userid de Moodle.
Se apaga para ti
Si eres Manager o Admin, el script se detiene. Cero bloqueos para el gestor.
Bloquea al alumno
Para estudiantes activa: sin clic derecho, sin selección de texto, sin F12 ni Ctrl+C.
Dónde pegarlo en tu Moodle
1
Entra en Administración del sitio desde el menú lateral de Moodle.
2
Ve a Apariencia → HTML adicional
3
Pega el código completo en el cuadro "Dentro del HEAD" (Within HEAD).
4
Guarda los cambios. Listo. Entra con una cuenta de estudiante para comprobar que los bloqueos funcionan.
El código
<script> document.addEventListener("DOMContentLoaded", function() { function evaluarSeguridad() { // 1. Buscar texto de administración (independiente del tema visual) let tieneMenuAdmin = false; document.querySelectorAll('a, span, button, p').forEach(el => { let txt = el.innerText.toLowerCase(); if (txt.includes('administración del sitio') || txt.includes('site administration')) { tieneMenuAdmin = true; } }); // 2. Comprobaciones técnicas por selectores y variables de Moodle let isManager = tieneMenuAdmin || document.querySelector('[data-key="siteadmin"]') || document.querySelector('.editmode-switch') || document.querySelector('#editmode-switch') || document.querySelector('a[href*="/admin/"]') || (window.M && window.M.cfg && window.M.cfg.userid === 2); // Si eres Manager/Admin, el script se detiene aquí if (isManager) { console.log("Otaingenio: Rol de gestión detectado. Protecciones desactivadas."); return; } // 3. Si es estudiante, se ejecutan los bloqueos document.addEventListener('contextmenu', event => event.preventDefault()); let antiSelectStyle = document.createElement('style'); antiSelectStyle.innerHTML = 'body, html, iframe, p, div, span { -webkit-user-select: none !important; -moz-user-select: none !important; -ms-user-select: none !important; user-select: none !important; }'; document.head.appendChild(antiSelectStyle); document.onkeydown = function(e) { if (e.keyCode == 123) { return false; } // F12 if (e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)) { return false; } // DevTools if (e.ctrlKey && e.shiftKey && e.keyCode == 'C'.charCodeAt(0)) { return false; } // Inspect if (e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)) { return false; } // Console if (e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)) { return false; } // Ver código fuente if (e.ctrlKey && e.keyCode == 'C'.charCodeAt(0)) { return false; } // Copiar }; } // Margen de 1,5s para que Moodle pinte los menús asincrónicos de Admin setTimeout(evaluarSeguridad, 1500); }); </script>
Nota técnica importante
Este script opera en el lado del cliente (frontend). Un usuario con conocimientos técnicos
puede desactivarlo. Su función es disuadir el copiado casual y proteger el contenido
de cursos del 95% del alumnado. No reemplaza la protección en servidor ni los derechos de autor.
Artículos relacionados