История .pushState и обновление страницы.
Я начал изучать новый API истории HTML5
Однако у меня есть один вопрос. Как можно обрабатывать обновление страницы?
Например, пользователь нажимает ссылку, которая обрабатывается функцией js, которая
асинхронно загружает содержимое страницы
изменяет URL с помощью history.pushState()
Пользователь обновляет страницу, но URL-адрес, конечно, не существует на сервере
Как вы справляетесь с такими ситуациями? С хэш-решением проблем там не было.
Спасибо
Ответы
Ответ 1
Вам необходимо выполнить перенаправление на стороне сервера для копирования и вставки поддельных URL-адресов
Все зависит от того, какую серверную технологию вы используете. Существует не JavaScript-способ, а создание сумасшедшей функции на вашей странице 404, которая перенаправляет пользователя на основе входящего URL-адреса, что не является хорошим решением.
Ответ 2
Это требует поддержки на стороне сервера. Идеальное использование .pushState
заключается в том, чтобы позволить URL-адресам из приложений JavaScript обрабатываться сервером разумно.
Это может быть либо путем повторного обслуживания одного и того же приложения JavaScript, и для его проверки window.location
, либо путем отображения содержимого на этом URL-адресе на сервере, как и для обычного веб-приложения. Специфичность, очевидно, меняется в зависимости от того, что вы делаете.
Ответ 3
Пользователь обновляет страницу, но URL, конечно, не существует. на сервере
Что вы подразумеваете под этим? У меня такое чувство, что ваше предположение неверно.
На самом деле да, дело в том, что разработчик должен предоставить (serveride или clientside) реализацию переписки с URL-адресом.
Если, опять же, я правильно задаю вопрос.
Ответ 4
Если вы используете ASP.NET MVC на своем сервере, вы можете добавить в свою функцию RegisterRoutes следующее:
routes.MapRoute(
name: "Default",
url: "{*url}",
defaults: new { controller = "Home", action = "Index" }
);
Это отправит все запросы на действие индекса вашего HomeController, и ваш пользовательский интерфейс обработает фактический маршрут.
Ответ 5
Для людей, которые ищут JS-решение, используйте событие popstate
на window
. Подробнее см. MDN - popstate, но по существу этому событию передается объект состояния, который вы передали pushState
или replaceState
. Вы можете получить доступ к этому объекту, как event.state
, и использовать его для определения того, что делать, т.е. Показать часть страницы AJAX.
Я не уверен, что это было недоступно в 2011 году, но теперь это доступно во всех современных браузерах (IE10 +).