Pregunta

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

¿Fue útil?

Solución

No es posible, lamentablemente.Sin embargo, considere el modelo de navegación de sus aplicaciones.¿Está utilizando el modelo Publicar/Redireccionar/Obtener PRG? http://en.wikipedia.org/wiki/Post/Redirect/Get?

Este modelo es más compatible con el botón Atrás que el modelo Postback.

Otros consejos

No deberías.

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

Le insto encarecidamente a que haga todo lo posible para evitar romper el botón Atrás; es una forma segura de alienar a sus usuarios e incluso llegar al número 1 en Los 10 principales errores de diseño web de Jacob Neilsen en 1999.

Quizás podría considerar hacer la pregunta:"¿Cómo evitar romper el botón Atrás para <insertar tu escenario aquí>?"

Si la respuesta de Scott se acerca a la realidad, considere cambiar su flujo al modelo PRG.Si es otra cosa, entonces da un poco más de detalle y mira cómo podemos ayudarte.

Se me ocurrió un pequeño truco que desactiva el botón Atrás usando JavaScript.Lo comprobé 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">
<html xmlns="http://www.w3.org/1999/xhtml" >
<title>Untitled Page</title>
<script type = "text/javascript" >
function changeHashOnLoad() {
     window.location.href += "#";
     setTimeout("changeHashAgain()", "50"); 
}

function changeHashAgain() {
  window.location.href += "1";
}

var storedHash = window.location.hash;
window.setInterval(function () {
    if (window.location.hash != storedHash) {
         window.location.hash = storedHash;
    }
}, 50);


</script>
</head>
<body onload="changeHashOnLoad(); ">
Try to hit back!
</body>
</html>

La mejor opción es no depender de las devoluciones de datos para controlar el flujo; sin embargo, si tiene que hacerlo (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ás que no funcionará en todos los navegadores, pero luego podrás introducir una verificación en tu 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 resolverá el problema hasta cierto punto. Código no verificado, solo para fines de ejemplo.

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

 <script>
window.location.hash="no-back-button";
window.location.hash="Again-no-back-button";//for google chrome
window.onhashchange=function(){window.location.hash="no-back-button";}
</script> 

Descripción detallada

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

Es posible que cualquier cosa que se le ocurra para desactivar el botón Atrás no lo detenga en navegadores futuros.

Si es tarde 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 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 tengo control total de los datos ya que uso alguna API de terceros después de mi formulario.Entonces usé esto

history.go(+1);

Esto enviará al usuario al "recibo" que se supone que aparece después de la página de "pago" si intenta volver a la página de "pago" (simplemente realiza un pago, por ejemplo).Úselo con moderación, aunque

Puede publicar los datos de cada formulario en una ventana _NUEVA.Esto deshabilitará el botón Atrás en cada ventana, pero sin JavaScript puede ser difícil forzar el cierre de la ventana anterior.

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

Pude lograr esto usando:

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

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

Encuentre el siguiente enlace

Desactivar la funcionalidad del botón de retroceso del navegador usando JavaScript en ASP.NET | Botón ASP.NET Disable el botón de retroceso del navegador (usando JavaScript)

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top