para - que se puede hacer con javascript en html
Documento listo para enviar el formulario y el historial del navegador (4)
Cuando el usuario pulsa el botón Atrás, el navegador muestra la copia en caché de la página. El envío del formulario no almacena en caché la página, por lo tanto, no aparece en su historial.
Tengo el siguiente código en mi página para enviar el formulario en la página automáticamente cuando el DOM está listo:
$(function () {
$(''form'').submit();
});
Sin embargo, en la página siguiente, si el usuario vuelve a hacer clic en su navegador, vuelve a la página anterior a esta en lugar de a la página con este código (de todos modos, con Chrome / IE). Es decir, falta la página con el formulario en el historial del navegador.
Esto es genial , aunque me pregunto si esto es algo que todos los navegadores modernos hacen ahora. Estoy buscando una respuesta que cite fuentes oficiales, como documentos de estándares de Internet o proveedores de navegadores que indiquen el mecanismo que han implementado.
Esto parece suceder solo si llamo a la función submit()
en los eventos DOM cargados o en Windows.
por ejemplo, este código mostrará la página del formulario en el historial del navegador después de hacer clic en la página (atrás / adelante): -
document.addEventListener(''click'', function () { document.forms[0].submit(); }, false);
los siguientes fragmentos no: -
document.addEventListener(''DOMContentLoaded'', function () { document.forms[0].submit(); }, false);
window.addEventListener(''load'', function() { document.forms[0].submit(); }, false);
window.onload = function () { document.forms[0].submit(); };
Dado que este código deja la página en el historial al responder al evento de click
:
document.addEventListener(''click'', function () { document.forms[0].submit(); }, false);
y los siguientes fragmentos de código no dejan la página en el historial ( DOMContentLoaded
y eventos de DOMContentLoaded
window onload
):
document.addEventListener(''DOMContentLoaded'', function () { document.forms[0].submit(); }, false);
window.addEventListener(''load'', function() { document.forms[0].submit(); }, false);
window.onload = function () { document.forms[0].submit(); };
Se puede suponer que los navegadores modernos no registran un historial de navegación para la navegación de la página que se produce dentro de los gestores de carga de ventana o preparados para documentos.
He tratado con esto antes No quería que el back button
llevara al usuario a la página anterior. Usar onbeforeunload
solucionó el problema para mí ...
Pero tu problema está relacionado con los siguientes conceptos.
- Contexto de navegación
- Historial de sesiones
- Reemplazo habilitado (bandera)
Un "Contexto de navegación" es un entorno en el que los objetos "Documento" se presentan al usuario.
La secuencia de "Documentos" en un "Contexto de navegación" es su "Historial de sesión". El "Historial de sesión" enumera estos "Documentos" como entradas planas.
El "Reemplazo habilitado" entra en vigencia cuando nos propagamos de un "Documento" a otro en el "Historial de la sesión". Si el recorrido se inició con "Reemplazo habilitado", se elimina la entrada inmediatamente anterior a la entrada especificada (en el "Historial de la sesión").
Nota Una pestaña o ventana en un navegador web normalmente contiene un contexto de navegación, al igual que un iframe o marcos en un conjunto de marcos.
Pensando lógicamente, llamando a cualquiera de estos
document.addEventListener( ''DOMContentLoaded'', function() {document.forms[0].submit();}, false );
window.addEventListener( ''load'', function() {document.forms[0].submit();}, false );
window.onload = function() {document.forms[0].submit();};
está sugiriendo que el navegador realice el #3
, porque lo que esas llamadas significan es que se propagan fuera de la página tan pronto como se cargue. Incluso para mí, el código es obviamente :) pidiendo que se borre del "Historial de sesión".
Otras lecturas...
Sí, la redirección desde un controlador de eventos onload
hace que la nueva URL reemplace la que dejó en el historial (y por lo tanto no agrega una entrada inútil). Pero ese no es el único desencadenante de ese reemplazo, también puede deberse a cualquier cambio de ubicación que se produzca lo suficientemente rápido, ya que esta demora está diseñada para evitar contaminar el historial en caso de re-instrucciones basadas en JavaScript.
Es muy difícil encontrar alguna especificación sobre ese tema, pero en Firefox este retraso parece ser de 15 segundos. Aquí hay una mención de este retraso en bugzilla de uno de los desarrolladores de moz:
Mozilla usa un umbral de 15 segundos para decidir si una página debe permanecer en el historial o no. Si un sitio usa y redirige a otro sitio en 15 segundos O redirige a otra página en onLoadHandler () etc ..., la página redirigida reemplazará (y por lo tanto eliminará) la página de redireccionamiento del historial. Si la redirección ocurre después de 15 segundos, la página de redirección permanece en el historial.
Uno puede discutir sobre el límite de tiempo. Pero esto es solo algo que pensamos que era un número razonable