javascript jquery html cross-browser back

javascript - ¿Cómo detectar si un usuario ha ido a una página usando el botón de retroceso(navegador)?



jquery html (0)

Tengo algunas páginas con vistas parciales generadas dinámicas, por ejemplo, en algunas páginas de búsqueda.

Si un usuario regresó a dichas páginas con el botón Atrás del navegador o con un botón de retroceder implementado como:

@if (Request.UrlReferrer != null) { <button onclick="history.go(-1); return false;" class="flatButtonSecondary">back</button> }

No obtiene las entradas generadas dinámicas cargadas desde la sesión o las cookies porque la página se carga desde la memoria caché del navegador.

Encontré este hilo similar: ¿Cómo puedo detectar si un usuario ha llegado a una página usando el botón Atrás? e implementado la respuesta como:

<form name="ignore_me"> <input type="text" value="0" id=''page_is_dirty'' name=''page_is_dirty'' style="display: none" /> </form> <script> var dirty_bit = $(''#page_is_dirty'')[0]; if (dirty_bit.value === ''1'') window.location.reload(); function mark_page_dirty() { dirty_bit.value = ''1''; } $(function () { mark_page_dirty(); }) </script>

debajo de la etiqueta en mi vista de diseño para que se llame cada vez que obtengo la página.

Así que esto funciona bien en Chrome, pero en Firefox se ejecuta en un bucle sin fin y en IE 10 simplemente no hace nada.

¿Alguien tiene una idea de cómo ejecutar esto en los tres navegadores, o puede darme una implementación alternativa?

Editar:

Después de algunos experimentos con los diferentes navegadores, encontré una solución que parece funcionar en los tres (FF, IE10, Chrome). Aquí está:

<input type="hidden" id="page_is_dirty" value="no"> <script type="text/javascript"> onload = function () { var e = document.getElementById("page_is_dirty"); if (e.value == "no") e.value = "yes"; else { e.value = "no"; location.reload(); } } </script>

Pero no estoy seguro, por qué esto se está ejecutando, y mi primera versión no. ¿Alguien puede llenar este vacío en mi mente?