Состояние истории и изменение URL-адреса в адресной строке

HTML5 представил несколько действительно удобных инструментов для манипулирования историю браузера, а именно методы history.pushState/replaceState и событие onpopstate, поэтому нам не нужно полагаться на location.hashes для отображения значимого URL-адреса для наших веб-приложений.

(Или лучше, мы не будем полагаться на хэши, когда внедрение IE‹10 будет незначительным.)

Использование кнопок браузера «назад» и «вперед» не перезагружает страницу, если целевое состояние было создано с помощью history.pushState, даже если URL-адрес выглядит совершенно иначе.

Однако, в отличие от изменения хеша, если пользователь изменяет URL-адрес из адресной строки браузера, браузер действительно перезагружает страницу. Почему-то я сомневаюсь, что для этого есть эффективное решение, но вопрос в том, есть ли способ запретить браузеру перезагружать страницу и вместо этого заставить его нажать состояние истории?


person MaxArt    schedule 06.08.2013    source источник


Ответы (2)


Я так не думаю. Насколько мне известно, ввод адреса вручную в адресной строке — в отличие от щелчка по ссылке, кнопок «назад/вперед», pushstate/popstate и отправки формы — определяется как запрос новой страницы, если только вы не измените хэш (например, в дни до HTML5). ).

person deitch    schedule 06.08.2013

Нет. Невозможно прервать загрузку новых страниц через адресную строку (за исключением событий unload, но они могут дать вам только прерывание «Вы уверены, что хотите покинуть текущую страницу?»).

Реальные URL-адреса должны обрабатываться вашим сервером, который должен привести страницу в ожидаемое состояние для этого URL-адреса, прежде чем доставить ее клиенту.

person Quentin    schedule 06.08.2013
comment
Так и думал. Прежде чем планировать использование history API, всегда следует учитывать работу сервера, поскольку, как вы знаете, пользователь всегда может вставить URL-адрес в адресную строку. Но если цель history API состоит в том, чтобы предоставить отличный способ изменить URL-адрес без перезагрузки страницы, кажется, что цель не полностью достигнута. - person MaxArt; 06.08.2013