Предоставление готовой формы документа и история браузера
У меня есть следующий код на моей странице, чтобы отправить форму на странице автоматически, когда DOM готов:
$(function () {
$('form').submit();
});
Однако на следующей странице, если пользователь нажимает back в своем браузере, он возвращается к странице перед этим, а не к странице с этим кодом (в любом случае с Chrome/IE). то есть страница с формой не указана в истории браузера.
Это замечательно, хотя я подумал, что теперь это все современные браузеры? Я ищу ответ, в котором цитируются официальные источники, например, из документов интернет-стандартов или поставщиков браузеров, в которых указывается механизм, который они реализовали.
Это происходит, только если я вызываю функцию submit()
в событиях готовности DOM или Window load.
например. этот код покажет страницу формы в истории браузера после щелчка страницы (назад/вперед): -
document.addEventListener('click', function () { document.forms[0].submit(); }, false);
следующие фрагменты не будут: -
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(); };
Ответы
Ответ 1
Я уже об этом говорил. Я не хотел, чтобы back button
пользователь возвращается на предыдущую страницу. Используя onbeforeunload
,
вопрос для меня...
Но ваша проблема связана со следующими понятиями
- Контекст просмотра
- История сеансов
- Замена включена (флаг)
-
"Контекст просмотра" - это среда, в которой объекты "Документ"
представлены пользователю.
-
Последовательность "Документов" в "Контексте просмотра" - это "История сеансов".
"История сеансов" перечисляет эти "Документы" как плоские записи.
-
"Замена включена" вступает в силу, когда мы распространяем один "Документ" на другой в "Истории сеансов". Если обход был инициирован с помощью "Замена включен", запись непосредственно перед указанной записью (в "Истории сеанса" ) будет удалена.
Примечание Вкладка или окно в веб-браузере обычно содержит контекст просмотра, как и iframe или фреймы в наборе фреймов.
Логическое мышление, вызывая любое из этих
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();};
вы предлагаете браузеру выполнить #3
, потому что эти вызовы означают
что они распространяются далеко от страницы, как только она загружается. Даже мне этот код
очевидно:), просьба очиститься от "Истории сеансов".
Дальнейшее чтение...
Ответ 2
Поскольку этот код оставляет страницу в истории при ответе на событие click
: -
document.addEventListener('click', function () { document.forms[0].submit(); }, false);
и следующие фрагменты кода не покидают страницу в истории (события 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(); };
можно предположить, что современные браузеры не записывают историю навигации для навигации по страницам, которая встречается в загрузке окна или обработчиках документов.
Ответ 3
Когда пользователь нажимает кнопку "Назад", браузер показывает кэшированную копию страницы. Форма submit не кэширует страницу, поэтому она не отображается в вашей истории.
Ответ 4
Да, перенаправление из обработчика события onload
заставляет новый URL-адрес заменять тот, который вы оставляете в истории (и, следовательно, не добавляет бесполезную запись). Но это не единственный триггер для этой замены, это также может быть вызвано тем, что любое изменение местоположения происходит достаточно быстро, эта задержка предназначена для предотвращения загрязнения истории в случае повторных указаний на основе JavaScript.
Очень сложно найти какую-либо спецификацию по этой теме, но в Firefox эта задержка составляет 15 секунд. Здесь упоминается об этой задержке в bugzilla от одного из разработчиков moz:
Mozilla использует порог в 15 секунд, чтобы решить, должна ли страница остаться в истории или нет. Если сайт использует и перенаправляет на другой сайт за 15 секунд или перенаправляет на другой страницы в onLoadHandler() и т.д., перенаправленная страница заменит (и тем самым исключить) страницу перенаправления из истории. Если перенаправление происходит через 15 секунд, страница перенаправления остается в история.
Можно спорить о лимит времени. Но это просто то, что мы считали разумным числом