Estoy haciendo una aplicación de cuestionario en línea en PHP. Quiero restringir que el usuario regrese a un examen. He intentado el siguiente script pero detiene mi temporizador. ¿Qué tengo que hacer?
He incluido el código fuente. El temporizador se almacena en cdtimer.js
<script type="text/javascript">
window.history.forward();
function noBack()
{
window.history.forward();
}
</script>
<body onLoad="noBack();" onpageshow="if (event.persisted) noBack();" onUnload="">
Tengo el temporizador de examen que toma una duración para el examen desde un valor mysql . El temporizador se inicia en consecuencia, pero se detiene cuando pongo el código para deshabilitar el botón Atrás. Cual es mi problema
javascript
browser
Sawant Akshay
fuente
fuente
Respuestas:
Existen numerosas razones por las que deshabilitar el botón Atrás no funcionará realmente. Su mejor apuesta es advertir al usuario:
Esta página enumera varias formas en que podría intentar deshabilitar el botón Atrás, pero ninguna está garantizada:
http://www.irt.org/script/311.htm
fuente
En general, es una mala idea anular el comportamiento predeterminado del navegador web. El script del lado del cliente no tiene el privilegio suficiente para hacerlo por razones de seguridad.
También se hacen algunas preguntas similares,
¿Cómo puedo evitar que la tecla de retroceso navegue hacia atrás?
¿Cómo evitar la acción de retroceso del historial predeterminado del navegador para el botón de retroceso con JavaScript?
En realidad, no puede deshabilitar el botón de retroceso del navegador. Sin embargo, puede hacer magia usando su lógica para evitar que el usuario navegue hacia atrás, lo que creará una impresión de que está deshabilitado. Aquí es cómo, mira el siguiente fragmento.
Esto está en JavaScript puro, por lo que funcionaría en la mayoría de los navegadores. También deshabilitaría la tecla de retroceso, pero la tecla funcionará normalmente dentro de los
input
campos ytextarea
.Configuración recomendada:
Coloque este fragmento en una secuencia de comandos separada e inclúyalo en una página donde desee este comportamiento. En la configuración actual, ejecutará el
onload
evento DOM, que es el punto de entrada ideal para este código.Demostración de trabajo!
Probado y verificado en los siguientes navegadores,
fuente
location.hash
inicialmente, así que me obligó a hacerlo así. Podría haber más mejoras en esto, pero 50 ms solo una vez no me costó mucho, así que lo dejo allí.Encontré esto, necesitando una solución que funcionara correctamente y "bien" en una variedad de navegadores, incluido Mobile Safari (iOS9 en el momento de la publicación). Ninguna de las soluciones era correcta. Ofrezco lo siguiente (probado en IE11, Firefox, Chrome y Safari):
Tenga en cuenta lo siguiente:
history.forward()
(mi antigua solución) no funciona en Mobile Safari --- parece no hacer nada (es decir, el usuario aún puede regresar).history.pushState()
funciona en todos ellos.history.pushState()
es una url . Soluciones que pasan una cadena como'no-back-button'
o'pagename'
parecen funcionar bien, hasta que luego intente Actualizar / Recargar en la página, en ese momento se genera un error de "Página no encontrada" cuando el navegador intenta localizar una página con eso como su URL. (También es probable que el navegador incluya esa cadena en la barra de direcciones cuando se encuentre en la página, lo cual es feo)location.href
.history.pushState()
es un título . Mirando por la web, la mayoría de los lugares dicen que "no se usa", y todas las soluciones aquí pasannull
por eso. Sin embargo, en Mobile Safari al menos, eso coloca la URL de la página en el menú desplegable del historial al que puede acceder el usuario. Pero cuando agrega una entrada para una visita a la página normalmente, coloca su título , que es preferible. Entonces, pasardocument.title
por eso da como resultado el mismo comportamiento.fuente
fuente
window.history.back()
función. Queremos evitar que los usuarios hagan clic en el botón Atrás del navegador, pero en algunos casos proporcionamos nuestro propio botón Atrás en la página. ¿Hay alguna manera de hacer que funcione?Este código deshabilitará el botón de retroceso para los navegadores modernos que admiten la API de historial HTML5. En circunstancias normales, presionar el botón Atrás retrocede un paso, a la página anterior. Si usa history.pushState (), comienza a agregar subpasos adicionales a la página actual. La forma en que funciona es, si fuera a usar history.pushState () tres veces, luego comience a presionar el botón Atrás, las primeras tres veces volvería a navegar en estos pasos secundarios, y luego la cuarta vez volvería a La página anterior.
Si combina este comportamiento con un detector de eventos en el
popstate
evento, esencialmente puede configurar un bucle infinito de subestados. Entonces, carga la página, presiona un subestado, luego presiona el botón Atrás, que muestra un subestado y también presiona otro, por lo que si presiona el botón Atrás nuevamente, nunca se quedará sin subestados para presionar . Si cree que es necesario deshabilitar el botón Atrás, esto lo llevará allí.fuente
no-back-button
... (Es probable que el navegador también aparezcano-back-button
en la dirección barra también, lo que parece feo.) Para ser justos, esta no es la única solución aquí que sufre de esto. El tercer argumento parahistory.pushState()
es una url , y debe ser la url de su página actual: uselocation.href
en su lugar.Para restringir el evento de regreso del navegador
fuente
fuente
Esta es la forma en que podría lograrlo. Cambiar extrañamente la ventana. La ubicación no funcionó bien en Chrome y Safari. Sucede que location.hash no crea una entrada en el historial de Chrome y Safari. Por lo tanto, tendrá que usar el pushstate. Esto está funcionando para mí en todos los navegadores.
fuente
$(document).ready(function () { .... });
fuente
event.persisted
?Este artículo en jordanhollinger.com es la mejor opción que siento. Similar a la respuesta de Razor pero un poco más clara. Código a continuación; créditos completos a Jordan Hollinger:
Página anterior:
Página de JavaScript sin retorno:
fuente
Este javascript no permite que ningún usuario regrese (funciona en Chrome, FF, IE, Edge)
fuente
Pruébalo con facilidad:
fuente
Este código se probó con los últimos navegadores Chrome y Firefox.
fuente
Función muy simple y limpia para romper la flecha hacia atrás sin interferir con la página posterior.
Beneficios:
onbeforeunload
setInterval
para que no rompa navegadores lentos y siempre funciona.unbeforeunload
que interrumpe al usuario con el diálogo modal.Nota: algunas de las otras soluciones utilizan
onbeforeunload
. Por favor, no utilizaronbeforeunload
para este propósito, el cual aparece un cuadro de diálogo cada vez que los usuarios intentan cerrar la ventana, golpe backarrow, etc. Modals comoonbeforeunload
son por lo general sólo es apropiado en raras circunstancias, tales como cuando en realidad han realizado cambios en pantalla y refugio' No los salvé, no para este propósito.Cómo funciona
Eso es. No hay que perder el tiempo, no hay monitoreo de eventos en segundo plano, nada más.
Úselo en un segundo
Para implementar, simplemente agregue esto en cualquier lugar de su página o en su JS:
fuente
Esto parece haber funcionado para nosotros al deshabilitar el botón de retroceso en el navegador, así como el botón de retroceso que lo lleva de regreso.
fuente
fuente
Simplemente no puede y no debe hacer esto. Sin embargo, esto podría ser útil.
Funciona en mi Chrome y Firefox
fuente
Intente esto para evitar el botón de retroceso en IE que por defecto actúa como "Atrás":
fuente
Creo que la solución perfecta pero en realidad es bastante sencilla, que utilicé durante muchos años.
Básicamente se trata de asignar el evento "onbeforeunload" de la ventana junto con los eventos del documento en curso 'mouseenter' / 'mouseleave' para que la alerta solo se active cuando los clics están fuera del alcance del documento (que podría ser el botón de retroceso o avance del navegador)
fuente
En un navegador moderno, esto parece funcionar:
fuente
Ninguna de las respuestas más votadas me funcionó en Chrome 79 . Parece que Chrome cambió su comportamiento con respecto al botón Atrás después de la Versión 75, vea aquí:
https://support.google.com/chrome/thread/8721521?hl=en
Sin embargo, en ese hilo de Google, la respuesta proporcionada por Azrulmukmin Azmi al final sí funcionó. Esta es su solución.
No entiendo completamente lo que escribió, pero aparentemente
history.back() / history.forward()
ahora se requiere un adicional para bloquear Back in Chrome 75+.fuente
Creo una página HTML (index.html). También creo uno (mecanismo.js) dentro de una carpeta / directorio (script). Luego, coloco todo mi contenido dentro de (index.html) usando formularios, tablas, span y etiquetas div, según sea necesario. ¡Ahora, aquí está el truco que hará que retroceder / avanzar no haga nada!
Primero, el hecho de que solo tienes una página. En segundo lugar, el uso de JavaScript con etiquetas span / div para ocultar y mostrar contenido en la misma página cuando sea necesario a través de enlaces regulares.
Dentro de 'index.html':
Dentro de 'mecanismo.js':
Parece complicado, pero tenga en cuenta los nombres y las llamadas de las funciones, el HTML incorporado y las llamadas de identificación de la etiqueta span. ¡Esto fue para mostrar cómo puede inyectar HTML diferente en la misma etiqueta de extensión en la misma página! ¿Cómo puede Atrás / Adelante afectar este diseño? ¡No puede, porque está ocultando objetos y reemplazando a otros en la misma página!
¿Cómo ocultar y mostrar? Aquí va: Funciones internas en 'mecanismo.js' según sea necesario, use:
Dentro de las funciones de llamada 'index.html' a través de enlaces:
y
Espero no haberte dado dolor de cabeza. Lo siento si lo hice :-)
fuente
En mi caso, este fue un pedido de compras. Entonces, lo que hice fue desactivar el botón. Cuando el usuario hizo clic de nuevo, el botón todavía estaba deshabilitado. Cuando hicieron clic de nuevo una vez más, y luego hicieron clic en un botón de página para avanzar. Sabía que su pedido fue enviado y saltado a otra página.
En el caso de que la página se actualizara, lo que haría que el botón (teóricamente) estuviera disponible; Luego pude reaccionar en la carga de la página que el pedido ya se envió y redirigir también.
fuente
fuente
javascript:
que ha escrito define una etiqueta de JavaScript llamada "javascript". Dudo mucho que quisieras eso; Sospecho que te estás mezclandohref=javascript:...
con<script>
bloques de JavaScript . 2.language="JavaScript"
dejó de ser un<script>
atributo válido en HTML5. 3. Los 2 puntos anteriores no importan mucho; lo que importa es quehistory.forward(1)
no funciona en Mobile Safari (al menos). Use una de lashistory.pushState()
respuestas en su lugar.Simplemente puede poner un pequeño script y luego verificar. No te permitirá visitar la página anterior. Esto se hace en javascript.
La función window.onunload se activa cuando intenta visitar la página anterior o anterior a través del navegador.
Espero que esto ayude.
fuente
Tuve este problema con React.JS. (componente de clase)
Y resuelve fácilmente
He usado
HashRouter
dereact-router-dom
.fuente
Simplemente configure
location.hash="Something"
, al presionar el botón de retroceso, el hash se eliminará de la URL pero la página no volverá, este método es bueno para evitar retroceder accidentalmente, pero por razones de seguridad, debe diseñar su back-end para evitar volver a responderfuente
fuente