replacestate recargar onpopstate mdn example event change cambiar javascript internet-explorer back-button

javascript - recargar - Evite el uso del botón Atrás(en IE)



window history replacestate({} (15)

Si está comenzando una nueva aplicación web desde cero, o si tiene tiempo suficiente para volver a trabajar su aplicación, puede usar JavaScript y AJAX para evitar las funciones de historial, retroceso y reenvío del navegador.

  • Abra su aplicación en una nueva ventana, ya sea antes o inmediatamente después del inicio de sesión.
  • Si lo desea, utilice las opciones de la ventana para ocultar la barra de navegación (con los botones hacia atrás y hacia adelante).
  • Use AJAX para todas las solicitudes de servidor, sin cambiar la URL de ubicación de la ventana.
  • Use una API web simple para obtener datos y realizar acciones, y renderice la aplicación usando JavaScript.
  • Solo habrá una URL en el historial de la ventana.
  • Los botones hacia atrás y hacia adelante no harán nada.
  • La ventana se puede cerrar automáticamente al cerrar la sesión.
  • No se filtra información al historial del navegador, lo que puede ayudar con la seguridad.

Esta técnica responde la pregunta, pero también contradice las mejores prácticas de varias maneras:

  • Los botones de retroceso y avance deben comportarse como se espera.
  • Una aplicación no debería abrir nuevas ventanas del navegador.
  • Una aplicación aún debería funcionar sin JavaScript.

Considere cuidadosamente sus requisitos y sus usuarios antes de utilizar esta técnica.

Entonces, las PYME en mi lugar de trabajo actual quieren probar y desactivar el botón Atrás para ciertas páginas. Tenemos una página donde el usuario hace algunas selecciones y las envía para su procesamiento. En algunos casos, deben ingresar un comentario en otra página.

Lo que los usuarios han descubierto es que no tienen que ingresar un comentario si envían la información e ir a la página con el comentario y luego presionar el botón Atrás para regresar a la página anterior.

Sé que hay varias soluciones diferentes para esto (y muchas de ellas son mucho más elegantes que deshabilitar el botón Atrás), pero esto es lo que me queda. ¿Es posible evitar que alguien vuelva a la página anterior alterando el comportamiento del botón Atrás? (como un submit -> return false sorta thing).

Debido a la doble información de publicación, no puedo hacer que regrese a la página anterior y luego pasar a la actual. Solo puedo permitir que no se aleje de la página actual. Busqué en Google, pero solo vi publicaciones diciendo que siempre volverá a la página anterior. Tenía la esperanza de que alguien tenga algunas habilidades locas de kung foo js que puedan hacer esto posible.

Entiendo que todos dicen que es una mala idea, y estoy de acuerdo, pero a veces solo tienes que hacer lo que te dicen.


Lo que los usuarios han descubierto es que no tienen que ingresar un comentario si envían la información e ir a la página con el comentario y luego presionar el botón Atrás para regresar a la página anterior.

Entonces, probablemente también sean lo suficientemente inteligentes como para escribir "sin comentarios" en el campo de comentarios.

Puede tratar de obligar a las personas a agregar comentarios, pero probablemente terminará con un software inutilizable, molestado y sin recibir comentarios. Este suele ser un buen momento para dar un paso atrás y reconsiderar lo que está haciendo desde el punto de vista de los usuarios.


¿Podría mover el comentario a la página anterior y convertirlo en un campo obligatorio allí?

Desactivar el botón Atrás no funcionará.


¿Tiene acceso al código fuente del lado del servidor? De ser así, puede verificar la primera página que redirecciona a la segunda página si la información ya se envió (deberá usar sesiones para esto, obviamente). En un trabajo anterior, así es como manejamos las aplicaciones de varios pasos (aplicación como en la solicitud de aceptación).


Debido al aislamiento de seguridad de javascript en el navegador, no puede cambiar lo que hace el botón Atrás.

¿Quizás podría almacenar algo en la sesión del usuario que indique que se necesita un comentario, y que cualquier página de la aplicación que el usuario intente cargar redirija a la página de comentarios?

¿Qué pasa si el usuario cierra su navegador cuando llega a la página de comentarios?

Sé que no se te ha dado ninguna opción aquí, pero dado que lo que están pidiendo parece ser imposible ...

Tal vez no pueda considerar el artículo como completado hasta que el usuario ingrese comentarios. Por lo tanto, debe realizar un seguimiento de los elementos en curso y los elementos completados, y hacer esa distinción en la interfaz de usuario, pero este podría ser el método más sólido.

¿O simplemente coloca el campo de comentarios en la página del formulario?


Desactivar el botón Atrás parece una especie de enfoque de "fuerza bruta".

Otra opción sería que podría saltar a un cuadro de diálogo modal que no tiene botones de comando, hacer avanzar a los usuarios a través del flujo de trabajo y cerrar el diálogo cuando se complete el proceso.


He visto esto antes:

window.onBack = history.forward();

Definitivamente es un truco sucio y, si es posible, intentaría no deshabilitar el botón Atrás. Y el usuario probablemente aún pueda sortearlo con bastante facilidad. Y dependiendo del almacenamiento en caché, no se sabe si el código del servidor se procesará o si la página en caché con JavaScript se ejecutará primero.

Entonces, sí, use bajo su propio riesgo :)


Nah, estás condenado. Incluso si abre la página en otro navegador y oculta el botón Atrás, siempre estará la tecla Retroceso.

El problema con los tipos de marketing y analistas es que algunos de ellos no entienden el concepto fundamental de que la web es apátrida. No entienden que la página está totalmente, totalmente ajena al navegador que la usa y el control absoluto del navegador está totalmente fuera de la capacidad de las páginas web.

La mejor forma de desalentar a los usuarios para que presionen el botón Atrás es asegurarse de que su página pierda todos sus datos cuando presionen hacia atrás; por ejemplo, la página de comentarios es el único punto donde se pueden guardar los datos, y si presionan el botón botón Atrás tienen que hacer todo de nuevo (pensar en las líneas de pragma: nocache).

Los usuarios se quejarán, claro, pero son la razón por la que existe este requisito dejado de lado, ¿no?


No hagas esto, simplemente no lo hagas. Es un mal diseño de interfaz y obliga al navegador del usuario a comportarse de una forma que no espera.

Consideraría cualquier secuencia de comandos que con éxito detuvo mi botón de volver a trabajar para ser un truco, y yo esperaría que el equipo de IE para liberar una solución de seguridad para ello.

El botón Atrás es parte de su interfaz de programa, no de su sitio web.

En su caso específico, creo que la mejor opción es agregar un evento de descarga a la página que advierta al usuario si no ha completado el formulario. El botón de retroceso no se vería afectado y el usuario sería advertido de su acción.


Simplemente no hay una manera confiable de hacer esto. No puede garantizar que el 100% del tiempo pueda evitar que el usuario haga esto.

Con esto en mente, ¿vale la pena ir a soluciones extremadamente exóticas para desactivar la "mayoría" de las veces? Eso es para que tú decidas.

Buena suerte.


Debe proteger su aplicación contra el envío doble en lugar de interrumpir la interfaz de usuario para ocultar el error.


Como una solución simple: prueba esta. Inserte un panel de actualización y un botón allí y utilice javascript para ocultarlo y luego presione en la carga de la página. Sí, entiendo que hará que su página publique nuevamente en la carga y puede que no funcione si javascript está deshabilitado, pero ciertamente lo ayudará a lograr una respuesta medio decente al problema del botón de retroceso. Andy


Puede evitar que vuelvan a la página anterior. location.replace() reemplaza la entrada del historial de la página actual con una nueva página, por lo que ...

page1.html: el usuario hace clic en un enlace que va a page2.html

page2.html: el usuario hace clic en un enlace que llama a location.replace(''page3.html'');

page3.html: el usuario hace clic en el botón Atrás y va a page1.html

Puede que esto no encaje bien con una POST, pero puede publicar los datos en un servicio web a través de AJAX, luego llamar a location.replace ()


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"> <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"; } // If you want to skip the auto-positioning at the top of browser window,you can add the below code: window.location.hash='' ''; 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 the back button! </body> </html>


No veo esta solución:

function removeBack(){ window.location.hash="nbb"; window.location.hash=""; window.onhashchange=function(){window.location.hash="";} }