Desactivar el botón Atrás en el navegador

Estoy escribiendo una aplicación que, si el usuario responde, puede reenviar la misma información y arruinar el flujo y la integridad de los datos. ¿Cómo lo desactivo para usuarios que están con y sin javascript activado?

No es posible, por desgracia. Sin embargo, considere su modelo de navegación de aplicaciones. ¿Estás usando Post / Redirect / Get PRG Model? http://en.wikipedia.org/wiki/Post/Redirect/Get ?

Este modelo es más amigable con el botón de retroceso que el modelo de Postback.

No deberias.

Puede adjuntar un script al evento onbeforeunload de una página y confirmar con el usuario que es lo que quiere hacer; y puede ir un poco más allá e intentar desactivarlo, pero, por supuesto, eso solo funcionará para los usuarios que tengan activado el javascript. En su lugar, revise la reescritura de la aplicación para que no realice transacciones en cada envío de página, sino solo al final del proceso.

Te recomiendo encarecidamente que tomes medidas heroicas para evitar romper el botón Atrás, es una manera segura de alienar a tus usuarios e incluso llegar al No.1 en los 10 errores de diseño Web más importantes de Jacob Neilsen en 1999 .

Tal vez podría considerar más bien hacer la pregunta: “¿Cómo evitar romper el botón Atrás para

Si la respuesta de Scott llega cerca de la marca, considere cambiar su flujo al modelo PRG. Si es algo más, da un poco más de detalles y ve cómo podemos ayudar.

Se me ocurrió un pequeño truco que desactiva el botón Atrás usando JavaScript. Lo revisé en Chrome 10, Firefox 3.6 e IE9:

< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  Untitled Page    Try to hit back!   

La mejor opción es no depender de las devoluciones para controlar el flujo, sin embargo, si está atrapado con esto (por ahora)

puedes usar algo como esto:

  Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetExpires(Now.AddSeconds(-1)); Response.Cache.SetNoStore(); Response.AppendHeader("Pragma", "no-cache"); 

Pronto descubrirá que no funcionará en todos los navegadores, pero puede introducir un código en su código como:

  if (Page.IsPostBack) { if (pageIsExpired()){ Response.Redirect("/Some_error_page.htm"); } else { var now = Now; Session("TimeStamp") = now.ToString(); ViewState("TimeStamp") = now.ToString(); } private boolean pageIsExpired() { if (Session("TimeStamp") == null || ViewState("TimeStamp") == null) return false; if (Session("TimeStamp") == ViewState("TimeStamp")) return true; return false; } 

Eso solucionará el problema en cierta medida, Código no verificado, solo para fines de ejemplos.

Es posible desactivar el botón Atrás en todos los principales navegadores. Simplemente usa valores hash para desactivar completamente el botón Atrás. Simplemente ponga estas 5 líneas de código en su página

   

Descripción detallada

Aquí hay una publicación anterior: Evite el uso del botón Atrás (en IE)

Cualquier cosa que se te ocurra para deshabilitar el botón de retroceso podría no detener el botón Atrás en futuros navegadores.

Si está avanzado en el ciclo de desarrollo, le sugiero que pruebe algunas sugerencias anteriores, pero cuando tenga tiempo debe estructurar su flujo para que el botón Atrás no interfiera con la lógica de su sitio, simplemente lleva al usuario a la página anterior como ellos esperan que lo haga.

Es cierto, se debe agregar una validación adecuada para garantizar que los datos duplicados no estropeen las cosas. Sin embargo, como en mi caso, no controlo completamente los datos ya que estoy usando API de terceros después de mi formulario. Entonces usé esto

 history.go(+1); 

Esto enviará al usuario al “recibo” que se supone que vendrá después de la página de “pago” si intenta regresar a la página de “pago” (simplemente dando un pago, por ejemplo). Use escasamente, aunque

Puede publicar los datos en cada formulario en una ventana _NEW. Esto desactivará el botón Atrás en cada ventana, pero sin javascript podría ser difícil forzar el anterior.

4 Chicos de Rolla escribieron este artículo sobre desactivar el botón Atrás hace mucho tiempo (en una galaxia muy lejana): http://www.4guysfromrolla.com/webtech/111500-1.shtml

Pude lograr esto usando:

  Response.Cache.SetExpires(DateTime.MinValue); Response.Cache.SetNoStore(); 

Cuando utilicé Response.Cache.SetCacheability (HttpCacheability.NoCache); me impidió descargar archivos de Office.

Encuentre el enlace a continuación

Deshabilitar la funcionalidad del botón de retroceso del navegador usando JavaScript en asp.net | ASP.Net desactiva el botón Atrás del navegador (usando javascript)

http://www.aspdotnet-suresh.com/2011/11/disable-browser-back-button.html