Возникает ли какое-либо событие при возврате с кнопкой возврата Safari v. 12 (+)? - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь найти какой-нибудь дескриптор, чтобы обнаружить, что страница отображается после кнопки «Назад» в 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).

Я все равно был бы рад найти ответ на оригинальный вопрос.

...