Simular un clic con JavaScript: click(), dispatchEvent() e isTrusted
Un cliente necesitaba que pulsar un enlace activara una pestaña de la interfaz. La solución fue despachar un evento hacia el elemento de destino. Pero hay una corrección importante respecto a mi explicación original: JavaScript no puede fabricar un clic humano de confianza.
Disparar el comportamiento de un elemento
Si quieres activar el clic de un botón, normalmente basta con:
const objetivo = document.getElementById('miObjetivo');
objetivo?.click();
Si necesitas configurar el evento, puedes construirlo explícitamente:
const objetivo = document.getElementById('miObjetivo');
if (objetivo) {
const evento = new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: true
});
const noCancelado = objetivo.dispatchEvent(evento);
console.log(noCancelado);
}
dispatchEvent() devuelve false si un manejador cancela un evento cancelable mediante preventDefault(). No te dice si la pestaña terminó abierta ni si una operación asíncrona finalizó.
Lo que no consigue
El evento sintético tiene isTrusted === false. No sustituye la activación del usuario requerida para ciertas APIs del navegador. Tampoco basta con cambiar su nombre a «user-click» ni con usar jQuery.
Si la biblioteca de pestañas ofrece una API pública para activarlas, usaría esa API: expresa mejor la intención y evita depender de un clic artificial. Para un formulario, también hay que distinguir activar un botón de enviar el formulario y validar sus campos.
Referencia: Event.isTrusted.
0 comentarios
Sé concreto, añade contexto (versión, distro, stack) y si puedes pega logs en bloque de código. Menos drama, más señales.