Подтвердить что ты не робот

История .pushState и обновление страницы.

Я начал изучать новый API истории HTML5

Однако у меня есть один вопрос. Как можно обрабатывать обновление страницы?

Например, пользователь нажимает ссылку, которая обрабатывается функцией js, которая

асинхронно загружает содержимое страницы

изменяет URL с помощью history.pushState()

Пользователь обновляет страницу, но URL-адрес, конечно, не существует на сервере

Как вы справляетесь с такими ситуациями? С хэш-решением проблем там не было.

Спасибо

4b9b3361

Ответ 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 +).