Я пытаюсь найти какой-нибудь дескриптор, чтобы обнаружить, что страница отображается после кнопки «Назад» в Safari. Я рассмотрел множество предложений внутри и за пределами StackOverflow, но большинству из них уже несколько лет, и ни одно из них, похоже, больше не работает в Safari 12.0.
Я особенно старался onpageshow
:
window.onpageshow = function(event) {
console.log("Onpageshow fired, event.persisted: ", event.persisted);
}
... и onreadystatechange
:
document.onreadystatechange = function () {
console.log("Onreadystratechange fired, readyState: ", document.readyState);
}
Оба запускаются при начальной загрузке страницы, как и ожидалось, но ни один не срабатывает после кнопки возврата. Естественно, ни DOMContentLoaded
, ни load
огонь, ни.
Моя проблема - поле ввода текста, которое имеет собственную реализацию автозаполнения. Я должен включить автозаполнение off
для этого поля, потому что в противном случае автозаполнение браузера будет отображаться поверх пользовательских предложений. (Autocomplete=off
и https
оба были указаны в другом месте в качестве причины, по которой текстовое поле в форме очищается во время перемотки вперед / назад.) Я решаю эту проблему, сохраняя значение в другом (не отображаемом) поле ввода, и восстановление видимого поля оттуда с помощью JavaScript. Работает как Charm, используя DOMContentLoaded
в Chrome, но я не могу найти событие, которое вызвало бы в последнем (также мобильном) Safari и позволило бы мне запустить замену.
В противном случае обратный кэш вперед в Safari прекрасно работает и работает очень быстро, поэтому я не хотел бы его отключать.
РЕДАКТИРОВАТЬ: Все еще не могу ответить на мой вопрос, но нашел обходной путь для моей проблемы. В случае, если кто-то приземлится здесь с той же проблемой: постоянство вводимых значений текста вперед / назад действительно кажется зависимым от настройки autocomplete
. Поэтому, если вместо статической настройки я устанавливаю autocomplete=off
для формы, когда ввод получает фокус:
myInput.addEventListener("focus", function() {
document.getElementById('my-form').autocomplete="off";
});
... и снова, когда вход теряет фокус:
myInput.addEventListener("blur", function() {
document.getElementById('my-form').autocomplete="on";
});
... содержимое текстового поля продолжает получать доступ к другой ссылке и возвращаться с помощью кнопки «Назад» в Chrome и Safari (по состоянию на ноябрь 2018 года на Mac).
Я все равно был бы рад найти ответ на оригинальный вопрос.