Estoy escribiendo una aplicación que si el usuario pulsa de nuevo, puede enviar la misma información y ensuciar el flujo y la integridad de los datos. ¿Cómo puedo desactivar esto para los usuarios que están con y sin javascript?

  • Si estoy usando su sitio, el botón atrás es aún la MÍA. No se metan con lo que es mío… 😉
  • Esta es la pregunta equivocada. Lo que usted debe hacer es diseñar la aplicación de tal modo que cuando la información se resienten, la aplicación lo reconocerá y actuar adecuadamente.
InformationsquelleAutor Haoest | 2008-09-17

13 Comentarios

  1. 76

    No es posible, por desgracia. Sin embargo, consideran que sus aplicaciones modelo de navegación. Estás usando Post/Redirect/Get PRG Modelo? http://en.wikipedia.org/wiki/Post/Redirect/Get?

    Este modelo es más botón atrás de usar que el modelo de Devolución.

    • Nada triste.
    • Punto válido. Estoy triste. 😉
    • Scott: Es la capacidad para desactivar las barras de herramientas y haga clic en el menú de IE específico, entonces? He visto aplicaciones LOB que completamente bloquear la navegación, pero (de nuevo, por desgracia) que también requieren que el usuario tiene IE.
    • Bien, algunas aplicaciones se pueden ejecutar por sí mismas en el modo «Quiosco», pero que implica el lanzamiento de IE con modificadores de línea de comandos.
    • Esa es una de las molestias que buenos navegadores intentar solucionar, como no solicitadas pop-up de windows. Firefox tengo un «Desactivar o reemplazar del menú de contexto» ajuste por este motivo.
    • Es posible poner a la pregunta de confirmación antes de volver botón nos llevará a la página anterior? En caso de ACEPTAR ir a la anterior si cancelar quedarse donde están.
    • 1. El código de su aplicación web con AJAX sólo, no cambiar la URL en absoluto. 2. Manejar onbeforeunload para advertir a los que están a punto de salir de la aplicación. Esto también evita la fuga de información para el navegador de la historia (y puede que también desee deshabilitar el almacenamiento en caché). Sería demasiado trabajo para hacer este cambio a una aplicación existente; este enfoque sólo es factible si se crea la aplicación en esto desde el principio.

  2. 12

    No debería.

    Puedes adjuntar algún script el evento onbeforeunload de una página y confirmar con el usuario que es lo que quiere hacer, y se puede ir un poco más allá y intentar a deshabilitar pero, por supuesto, que sólo funcionará para los usuarios que tengan javascript activado. En lugar de mirar a la reescritura de la aplicación, de manera que no se comprometa las transacciones en cada página de submit, pero sólo al final del proceso.

    • Hmmm… el evento onbeforeunload sería llamado también al navegar fuera de la página, puesto que el usuario es simplemente ir a otra página (no sólo porque el usuario empuja el botón «atrás»), y el guión iba a ser llamado.
  3. 8

    Yo recomiendo que para ir a la heroica longitudes para evitar que se rompa el botón atrás, es una manera segura del fuego de alienar a sus usuarios y aunque lo hizo para el número 1 en Jacob Nielsen Top 10 de Errores de Diseño Web en 1999.

    Tal vez usted podría considerar la posibilidad de, en lugar de preguntar: «¿Cómo evitar que se rompa el botón atrás para <inserte el escenario aquí>?»

    Si Scott respuesta golpea cerca de la marca, considere la posibilidad de cambiar su flujo a la PRG modelo. Si es otra cosa, a continuación, dar un poco más de detalle y ver cómo podemos ayudarle.

    • Él no dijo que él quería «romper» el botón atrás. Se quiere evitar un error común en el que la moderna Ajax patrones de diseño fallar porque un usuario presiona el botón «Atrás» con el significado de «Deshacer La Cosa de la que me Acabo de hacer Con Su Aplicación Ajax» y en su lugar pone «Volver a Una Arbitraria Y Ambigua Petición HTTP».
    • Para mí que sólo lee «no quería romper el botón atrás, él sólo quería romper el botón atrás para evitar que se quiebre». :S es posible obtener AJAX/JavaScript y los botones de la espalda a jugar bien, todo lo que estoy sugiriendo es que sería la ruta, me gustaría recomendar la siguiente.
  4. 7

    Se me ocurrió un pequeño hack que deshabilita el botón atrás el uso de JavaScript. Lo he comprobado en chrome 10, firefox 3.6 y 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>
    
    • Eso es sólo desagradable…
    • Pero funciona – seguir adelante y probarlo.
    • No me cabe duda de que. Es sólo una mala experiencia para el usuario, que en realidad puede quiero para volver.
    • IE9 no me permite desplazarse hacia abajo por este. Funciona bien en las últimas FF, Chrome, Safari. Las personas que van a utilizar mi sola página de la aplicación sólo tendrá IE<=9 el uso de aunque.
    • No es siempre una mala experiencia para el usuario, a veces la experiencia adecuada. por ejemplo, una página puede cambiar su estado con Ajax, por ejemplo, gmail. cuando el usuario hace clic en ‘volver’, el usuario espera que la página vuelva a la estado, en lugar de volver a la anterior página
    • Mientras que no muy agradable, esta solución es perfecta para una aplicación específica en el que estoy trabajando y funciona muy bien. Hay una razón por la que IE9 tiene problemas, aunque? Cuando el desplazamiento se mantiene saltar de nuevo a la parte superior de la página. Cualquier solución para nuestros IE9 los usuarios?
    • Usa anclas HTML para deshabilitar el botón de volver atrás, de modo que cuando el usuario hace clic en atrás que en realidad saltar a la anterior de anclaje. en este caso, ‘#1’ o ‘#’. si no existen en la página, la página se desplaza a la parte superior. Puede ser fijado con otros textos de anclaje o con javascript
    • genial!!.. exactamente lo que yo necesitaba.

  5. 5

    Mejor opción es no depender de las devoluciones de datos para el control de flujo, sin embargo, si usted está atascado con él (por ahora)

    puede usar algo como esto:

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

    Pronto se dará cuenta de que no va a funcionar en todos los navegadores, pero, a continuación, usted puede introducir una verificación en el 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;
      }
    

    Que va a resolver el problema en cierta medida, el Código no se verifica sólo para ejemplos de los efectos..

  6. 4

    Es posible desactivar el botón atrás en todos los principales navegadores. Sólo utiliza los valores de hash para deshabilitar el botón atrás completamente.
    Acaba de poner estas 5 líneas de código en su página de

     <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

    • Complicado..pero funciona…
    • Genial! Me salvó la vida! Gracias!!!
    • no funciona correctamente en todos los casos, es decir, chrome, safari.
    • Por favor, no hagas esto! Es realmente molesto si las páginas lío básicos de la funcionalidad del navegador.
    • Estoy totalmente de entender la acabo de responder para responder a la pregunta, es al lector a decidir si es bueno o no
  7. 3

    Lo que usted viene para arriba con deshabilitar el botón atrás no podría detener el botón atrás en el futuro de los navegadores.

    Si su tarde en el ciclo de desarrollo sugiero probar algunas de las sugerencias anteriores, pero cuando usted consigue el tiempo se debe a la estructura de su flujo, de modo que el botón atrás no interfiere con la lógica de su sitio, simplemente se requiere que el usuario vuelva a la página anterior, como se espera que haga.

  8. 1

    Es verdadera, correcta validación debe ser añadido para asegurarse de que los datos duplicados no desordenar las cosas. Sin embargo, como en mi caso, no tengo control total de los datos, ya que estoy usando una tercera parte de la API después de mi formulario. Así que utiliza esta

    history.go(+1);
    

    Esto va a enviar al usuario hacia adelante a la «recepción», que se supone que viene después de «pago» de la página si intentan volver a «pago» de la página (sólo dando un pago, por ejemplo). Usar con moderación, aunque

  9. 0

    Puede publicar los datos de cada formulario a un _NEW ventana. Esto deshabilitará el botón atrás en cada ventana, pero sin javascript puede ser difícil para forzar la antigua cerrado.

  10. 0

    Yo era capaz de lograr esto mediante el uso de:

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

    Cuando he usado la Respuesta.La memoria caché.SetCacheability(HttpCacheability.NoCache); por lo que me impedía la descarga de archivos de office.

Dejar respuesta

Please enter your comment!
Please enter your name here