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

273
Visualizações
El historial del navegador se rompe al usar el estado push

Tengo el siguiente código en mi aplicación que intenta recuperar algunos datos de una URL y luego actualiza el navegador con la nueva URL.

 const response = await fetch(url); if (response.ok) { ... window.history.pushState({ loaded: true }, null, url); }

Ahora, cada vez que hago clic para volver a obtener los datos (con una nueva URL), la URL en el navegador se actualiza correctamente. Sin embargo, si vuelvo a hacer clic, no hace nada a menos que haga clic suficientes veces para volver a la página referida.

Mi primera solución fue cambiar el código anterior a lo siguiente:

 const response = await fetch(url); if (response.ok) { ... if (window.history.state && window.history.state.loaded) window.history.pushState({ loaded: true }, null, url); else window.history.replaceState({ loaded: true }, null); }

Ahora, cuando vuelvo a hacer clic después de que se carga inicialmente, vuelve a la página referida, ya que simplemente reemplazo el estado y no inserto nada en la pila de historial, antes de haber tenido que volver a hacer clic dos veces. Sin embargo, todavía tengo el problema de que cuando vuelvo a recuperar los datos, ahora se enviarán a la pila de historial y no sucede nada cuando vuelvo a hacer clic.

Pensé que lo más fácil sería volver a cargar la página cuando haga clic en Atrás y los datos se hayan cargado. Por lo tanto probé lo siguiente:

 window.addEventListener('popstate', e => { if (e.state && e.state.loaded) window.location.href = window.location.pathname + window.location.search; });

Sin embargo, ahora parece que no puedo volver a la página referida. Esto se debe a que aunque vuelvo a cargar la página (en el detector de eventos "popstate") cuando obtiene los datos, dice que el estado se ha cargado.

Pensé que esto sería nulo después de la recarga, pero como no lo es, pensé que obligaría al navegador a asegurarse de que el estado inicial sea nulo cuando se cargue por primera vez:

 window.addEventListener('load', e => { window.history.replaceState(null, null); });

Sin embargo, aunque inicialmente parecía funcionar, descubrí que esto se debía solo a que tenía las herramientas de desarrollador en ejecución (con el almacenamiento en caché deshabilitado).

Estoy seguro de que me falta algo básico, ya que parece ser un problema bastante común. Agradecería si alguien pudiera mostrarme lo que estoy haciendo mal.

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Descubrí que cambiar mi solicitud de recuperación a lo siguiente parece funcionar:

 await fetch(url, { cache: 'no-store' });

Alternativamente, también funciona agregar un parámetro de cadena de consulta adicional a la url obtenida.

Dejaré esto abierto por un momento en caso de que alguien tenga una solución mejor.

about 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