Una sola excepción no capturada puede detener la inicialización posterior y hacer que varios controles parezcan averiados. La primera línea de error y el archivo realmente cargado aportan más información que reinstalar todos los plugins relacionados.
Conserva la página, navegador y versiones de recursos antes de regenerar scripts.
Reproduce un único control
Anota URL, ancho, consentimiento, sesión, interacción exacta y resultado esperado. Repite en un navegador limpio sin extensiones.
Captura:
primera excepción de Consola
archivo, línea y pila
peticiones fallidas en Red
versión y caché del script
ID o clase del objetivo HTML
si el evento llega a ejecutarse
Oculta datos privados, cookies y tokens.
Empieza por la primera excepción
Recarga con Consola abierta e interactúa una vez. Los errores posteriores pueden ser simples consecuencias de una dependencia no definida.
Abre el archivo desde su URL cargada y confirma que contiene JavaScript, no una página HTML de error servida con un tipo incorrecto. Usa source maps en staging si existen, sin publicar código propietario contra la política del proyecto.
Comprueba dependencias y orden
Los scripts de WordPress deben declarar dependencias como jquery en lugar de asumir un orden global.
wp_enqueue_script(
'site-ui',
get_stylesheet_directory_uri() . '/assets/ui.js',
array( 'jquery' ),
'1.2.0',
true
);
Evita copias duplicadas de jQuery. defer, módulos y carga en el pie pueden cambiar el orden; inspecciona los atributos reales de la página.
Inspecciona el objetivo en el DOM
Una actualización de tema o bloques puede renombrar clases o generar IDs duplicados. Confirma que el selector coincide y que el código admite varias instancias.
Para contenido insertado dinámicamente, usa delegación de eventos cuando corresponda. No registres manejadores repetidos en cada actualización AJAX. Comprueba a la vez clic, teclado y estado ARIA.
Aísla la optimización
Los plugins de minificación, combinación o retraso pueden alterar el orden o conservar un bundle antiguo. Desactiva una sola función en staging y compara.
Excluye únicamente el script o dependencia incompatibles que hayas demostrado, regenera recursos y versiona el lanzamiento. El consentimiento debe retrasar analítica opcional, no los controles esenciales.
Revisa CSP, CORS y contenido mixto
Content Security Policy, CORS o una mezcla de HTTP y HTTPS pueden bloquear bibliotecas y API. Lee el mensaje exacto del navegador.
Ajusta CSP de forma limitada para los orígenes, nonces o hashes necesarios. No añadas comodines ni unsafe-inline como reparación rápida. Prioriza dependencias locales mantenidas cuando sea viable.
Repara el comportamiento defensivo
Corrige el componente, la dependencia, el selector o la comprobación nula en la fuente:
const trigger = document.querySelector("[data-dialog-trigger]");
if (trigger) {
trigger.addEventListener("click", openDialog);
}
La comprobación evita romper páginas sin ese componente, pero no corrige el HTML ausente donde el botón sí es obligatorio.
Contén los scripts de terceros
Chat, mapas, consentimiento y analítica pueden fallar sin inutilizar la interfaz principal. Carga integraciones opcionales de forma asíncrona y fuera de la ruta de inicialización crítica.
Añade timeouts y alternativas para API externas. No encadenes la preparación del menú o modal a una promesa de marketing. No ocultes globalmente todos los errores: registra una huella segura del fallo y su origen.
Instrumenta los eventos en staging
Usa los paneles de listeners, breakpoints e instrumentación temporal para saber qué manejador se ejecuta, llama a preventDefault() o detiene la propagación.
Retira el diagnóstico antes de publicar. Si dos plugins controlan el mismo disparador, define propiedad y namespaces. En contenido AJAX, inicializa una vez cada componente y limpia al retirarlo.
Verifica todos los estados
Prueba ratón, toque, teclado, varios controles, apertura, cierre, navegación atrás y contenido dinámico en navegadores representativos. Repite con la caché caliente.
Supervisa las huellas de errores del frontal tras desplegar. Que el botón esté visible no demuestra que su interacción funcione.