Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

117
Vistas
Oyente de eventos de JavaScript en línea frente a explícito

Estoy usando Tampermonkey para manipular y automatizar algunas páginas web. Para esto, agrego un detector de eventos al evento de "carga" de la ventana. Cuando defino el controlador de eventos como una función explícita, funciona sin problemas y como se esperaba, es decir, se llama a la función cada vez que se carga la página correspondiente.

 window.addEventListener("load", run()); function run() { // do something }

Sin embargo, cuando defino el controlador en línea de la siguiente manera

 window.addEventListener("load", function (){ // do something });

luego necesito actualizar/recargar la página varias veces antes de que se ejecute la función.

¿Cuál es la explicación para tener un comportamiento tan diferente? No habría esperado ninguna diferencia si defino la función "explícitamente" como en el primer ejemplo, o "en línea" como en el segundo. Como no lo he notado antes, ni siquiera sé si se trata de un problema de Tampermonkey o de Javascript.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

window.addEventListener("load", run()); no ejecuta la función de run en la load sino de inmediato y el valor devuelto por la run se usa como devolución de llamada (que probablemente no esté undefined ). Este es un duplicado para que addEventListener llame a la función sin que yo siquiera se lo pida.

Acerca de:

luego necesito actualizar/recargar la página varias veces antes de que se ejecute la función.

Entonces probablemente registre el detector de eventos tarde (en un punto en el que posiblemente la página ya estaba cargada).

Ni siquiera sé si se trata de un problema de Tampermonkey o de Javascript.

No es ninguno de estos, es una suposición falsa de su parte que el sitio no puede estar ya cargado en el momento en que registra el evento de carga.

Quiere tener algo similar a la función ready de jQuery, cuya implementación de ejemplo sin jQuery se puede encontrar aquí $(document).ready equivalente sin jQuery .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Tl; Dr: pasa tu función, no la ejecutes. Deje que el controlador de escucha "load" lo ejecute en su lugar:

 window.addEventListener("load", run);

run() ejecuta su función y devuelve undefined por defecto: * window.addEventListener("load", undefined); // and executed. *

 window.addEventListener("load", run()); // run() executes immediately function run() { // do something }

Si run() devuelve otra función , entonces está bien

 window.addEventListener("load", run()); // run() executes immediately // but returns a function in its place. function run() { return function() { // do something } }

ya que ahora no está pasando undefined , sino una function real.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda