Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

335
Visualizações
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 o cambia la 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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda