Как перезагрузить исходный URL-адрес после восстановления после отключения сети - PullRequest
0 голосов
/ 17 июня 2020

У меня есть веб-приложение, которое использует сервис-воркер, который определяет, когда сеть находится в автономном режиме, и обслуживает кешированную автономную страницу.

У меня есть случай, когда:

  • программа запускается, пока сеть подключена, и загружает url https://localhost/my_site
  • пользователь нажимает кнопку, которая запускает вызов выборки
  • в это время сеть отключается,
  • работник службы обнаруживает это состояние и возвращает кэшированную офлайн-страницу
  • код javascript проверяет тип содержимого ответа, обнаруживает, что это текст / html (вместо исходного ответа, который должен был быть, например, application / json)
  • код javascript отображает автономная страница (установив "window.location.href = response.url"). Автономный URL-адрес https://localhost/static/offline/offline.html
  • на этом этапе в адресной строке сайтов отображается автономный URL-адрес.

Я ожидаю, что тогда пользователь refre sh страницу (например, нажав F5), чтобы перезагрузить исходное содержимое после повторного подключения к сети. Но поскольку в адресной строке теперь отображается автономный URL-адрес, обновление страницы просто перезагружает автономную страницу снова и снова.

Как пользователь может вернуться к исходному URL: https://localhost/my_site?

Спасибо, Avner


EDIT:

Почему бы просто не обслуживать офлайн-страницу от сервис-воркера как localhost / my_site

Это может происходить из-за различных страниц. Как бы вы программно изменили response.url? Я пробовал использовать решение на основе , здесь . Когда выборка возвращается, я проверяю тип ответа. Если это текст / html, я загружаю новую страницу из ответа, а затем использую:

window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", queryUrl1);

, чтобы установить URL-адрес, но он изменяет только URL-адрес в истории, а не в представленном в данный момент URL ...

1 Ответ

0 голосов
/ 19 июня 2020

Проблема возникла в следующей ситуации: Мое приложение wep - это одностраничное приложение (SPA), в котором дерево DOM изменяется во внешнем интерфейсе с помощью команд ajax. В моем случае функция, ожидающая ответа выборки, ожидает тип содержимого application / json. Когда сервисный работник обнаруживает отключение сети, он возвращает ответ типа содержимого: текст / html (автономная страница). Поскольку ошибки ответа нет, функция пытается извлечь ответ. json (), но поскольку тип является текстом, а не json, (из-за автономной страницы) синтаксический анализ завершается неудачно и выдает ошибку, а текст / html данные (офлайн-страница) игнорируются. Принудительная перезагрузка страницы с помощью window.location.href = response.url заставляет программу загружать страницу, что изменяет адресную строку, что не позволяет пользователю восстановить исходную страницу с помощью refre sh, когда сеть повторно подключается

Решение:

  • определить, не удалось ли выборка из-за отключения сети Я делаю это, проверяя (response.url == "https://localhost/static/offline/offline.html")
  • если да, замените содержимое существующей страницы, используя: document.getElementsByTagName("html")[0].innerHTML = dataAsText;

    Это имеет дополнительное преимущество: если отключение сети происходит, когда мы находимся на другой странице, после повторного подключения к сети refre sh загружает последнюю посещенную страницу (сохраняет последнее состояние)

  • прекратить использование window.location.href для загрузки офлайн-страницы. Это дает следующие преимущества: предотвращение перезагрузки страницы, которая перезагружает заголовки и ресурсы, что замедляет ответ, и предотвращение изменения ссылки в адресной строке, чтобы пользователь мог восстановить последнюю страницу, просто обновив страницу, при повторном подключении к сети.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...