Para esto encontré varias soluciones pero ninguna 100% efectiva.
Una era hacer uso de cabeceras y caché haciendo que las paginas expiraran al momento pero esto provocaba que al usuario final le apareciera un mensaje de error del navegador diciendo que la página habia expirado, no era una solución muy elegante asi que decidí buscar alternativas en javascript.
Una solución era utilizar la función window.back:
Código:
previene = function(){ history.go(1); };
window.back = previene();
Con esto cada ves que presionaba el botón volver el usuario era redirigido nuevamente a la página final, pero de todas maneras cargaba la pagina anterior y se veia muy feo el intercambio de paginas, la idea era que simplemente no funcionara ese botón.
Por lo cual se me ocurrió utilizar window.stop:
Código:
previene = function(){ window.stop(); history.go(1); };
window.back = previene();
El problema era que igual no alcanzaba a detenerse y seguia mostrando la pagina anterior antes de redirigir al usuario. Por lo cual se me ocurrió utilizar HTML5 y sobreescribir el historial con la pagina actual, el problema es que no es soportado por Internet Explorer
Por ahi vi un código similar a este:
Código:
<body onunload="history(1)">
El problema era exactamente el mismo del anterior, de hecho con body no funcionaba en algunos navegadores como firefox, pero si a traves de unload de jquery:
Código:
$(windows).unload = function(){ window.stop(); history(1); return false; };
Pero, el mismo problema de siempre, no alcanzaba a detener la página anterior.
Buscando y buscando entontré una solución a medias pero efectiva:
http://es.softuses.com/6227 (répondre #8)
hacía que cada 50 milesimas de segundos cambiara la localización a traves de un hashtag haciendo que el historial quedara infinitamente sobre la misma pagina:
Código:
http://pagina.com/#500
http://pagina.com/#501
http://pagina.com/#502
...
El problema es que no era una solución muy elegante porque el usuario verá en la barra del navegador como cambia infinitamente la URL y si necesita escribir una dirección no podrá.
Asi que en base a este mismo concepto armé una solución mas elegante y funcional:
Código
$(document).ready(function(){ window.onhashchange = function(){ if (typeof (window.stop) != 'undefined') window.stop(); if (typeof (document.execCommand) != 'undefined') document.execCommand('Stop'); if (document.location.hash.length < 10) history.go(1); }; /* Push 10 History */ document.location += "#"; for(i = 0; i < 10; i++) document.location += "@"; });
De esta manera cuando carga el sitio por primera ves creará un hastag con 10 arrobas creando una pila de 10 historiales sobre si mismo, cuando la localización del hash cambia al presionar el botón volver atrás inmediatamente se avanza el historial hacia el ultimo arroba agregado, de esta manera cuando el usuario intente volver atras siempre quedará sobre si mismo y no habrá un pestañeo de pagina ni de cambios ya que solo son tags y la carga se detiene, no hay cambio en el DOM a excepción del hash y el que lo manipule.
Le puse 10 hash porque pensé que talves podía haber alguien muy rapido presionando atrás con un pc demasiado lento, puede que alcance a devolverse dos arrobas como mucho pero no 10.
A mi me funciona de lujo y lo genial es que funciona con cualquier navegador, espero que a alguien mas le sirva porque es un tema muy muy discutido en todos lados y ninguno de los que he visto ha sabido dar una solución como se debe.
saludos.