Състояния на историята и промяна на URL адреса в лентата с адреси

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

(Или по-добре, няма да разчитаме на хешове, когато приемането на IE‹10 ще бъде незначително.)

Използването на бутона за връщане назад и напред на браузъра не презарежда страницата, ако целевото състояние е създадено с помощта на history.pushState, дори ако URL адресът изглежда напълно различно.

Въпреки това, за разлика от промяната на хеша, ако потребителят промени URL адреса от адресната лента на браузъра, браузърът презарежда страницата. Някак си се съмнявам, че има ефективно решение за това, но въпросът е: има ли начин да се попречи на браузъра да презареди страницата и вместо това да се принуди да прокара състояние на хронология?


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


Отговори (2)


Не вярвам. AFAIK, ръчното въвеждане на адрес в адресната лента - за разлика от щракването върху връзка, бутони за връщане/напред, 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