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

902
Views
NextJS: recarga de anuncios Javascript y espacios publicitarios en el cambio de ruta

Tengo un javascript personalizado para publicar anuncios en mi sitio NextJS. Esto es proporcionado por el proveedor de anuncios / intercambio de anuncios.

Se ve algo como esto:

 <script type="text/javascript" src="//cdn.adsite.com/static/js/ad.js" ></script>

Junto con esto tengo etiquetas div que coloco en la página web, por ejemplo:

 <div id="ad-tag-6098" ></div> <div id="ad-tag-6099" ></div> <div id="ad-tag-6076" ></div>

Estas tres etiquetas div son tres espacios publicitarios en una página y se completan con el anuncio mediante el javascript ad.js.

Esto funciona bien en una carga/recarga normal de una página.

Sin embargo, cuando navego a una página usando el enrutador de navegación interno, este javascript no se activa y el anuncio no se muestra.

¿Cuál es la forma correcta de recargar ad.js para que las etiquetas div (espacios publicitarios) muestren el anuncio correctamente y también se actualicen correctamente incluso cuando naveguemos a través del enrutador nextjs? ¿Puedes ayudarme?

ACTUALIZACIÓN: Este problema es aún más profundo de lo que pensaba. Solo recargar javascript no es suficiente. Dado que se trata de espacios publicitarios, cuando la página cambia de transición/ruta, los espacios publicitarios utilizados permanecen en la memoria, por lo que el script del anuncio los trata como si ya se hubieran mostrado. Esto provoca un error.

El comportamiento deseado es el siguiente:

  1. cuando se procesa el componente del anuncio, define el espacio publicitario y lo muestra,
  2. cuando se cambia la ruta, todas las ranuras definidas se eliminan de la memoria,
  3. después de ir a una página diferente, los componentes del anuncio en esa página definen nuevos espacios y los muestran.
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Puede que lo sepas, pero quería recordarte que hay oyentes para los cambios de ruta en NextJS.

 router.events.on('routeChangeComplete', handleRouteChange) router.events.off('routeChangeComplete', handleRouteChange)

puede volver a cargar el script cuando la ruta cambia con la ayuda de estos eventos. puede buscar el script y agregarlo al final del cuerpo del script para cada cambio de ruta. asi se reiniciara la memoria de los adjs

Espero que este router.events ayude, esperando sus comentarios.

ACTUALIZACIÓN: Según tu comentario, quería actualizar aquí. Con la ayuda de estos router.events, usted tiene el control. Puedes manipular el DOM. No debe ser una solución específica de React o una solución específica de NextJS. Tienes el poder de Javascript.

Si es usted quien agrega todas las divisiones de anuncios, puede agregar un atributo de datos para seleccionar esas divisiones más adelante.

Por ejemplo, supongamos que agregó esta división de anuncios

 <div id="ad-tag-6098" ></div> // instead of this! <div id="ad-tag-6098" data-ad="true" ></div> // add this one!

al usar el evento routeChangeStart de router.events , puede seleccionar los divs con el atributo de anuncio de datos y eliminar el contenido completo de ellos del DOM antes del evento routeChangeComplete y cuando se vuelve a cargar el script, no debería arrojar un error.

 const adDivs = document.querySelectorAll('[data-ad="true"]'); // you can get these divs and remove the child of them before routeChangeComplete cycle

¿Qué piensas sobre esta parte actualizada de mi respuesta? Déjame saber tu opinión.

over 4 years ago · Santiago Trujillo Report

0

Otro truco simple sería agregar una cadena de consulta única que haría que el script se cargara y ejecutara una y otra vez.

Para eliminar ads antiguos, se puede usar el controlador de eventos onLoad del componente Script .

 import Script from 'next/script' export default function Home() { const unique_id = new Date().getTime(); return ( <> <Script id={unique_id} src={`//cdn.adsite.com/static/js/ad.js?v=${unique_id}`} onLoad={() => { // execute code after script load }} /> </> ) }


Un mejor enfoque sería cargar el script solo una vez y actualizar los espacios que se han creado con la función de actualización provista, o puede borrar y cargar nuevos anuncios con la misma funcionalidad.

 function refreshAllSlots() { googletag.cmd.push(function() { googletag.pubads().refresh(); }); } function clearAllSlots() { googletag.cmd.push(function() { googletag.pubads().clear(); }); }

Nota:

  • El ejemplo es para los anuncios de Google, pero probablemente se pueda lograr lo mismo en otros anuncios.
  • Estos métodos se pueden llamar utilizando métodos de ciclo de vida o ganchos o cualquier otro método factible.
over 4 years ago · Santiago Trujillo 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!