Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

112
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!