Я думаю, что вы ищете url history.pushState, которые позволяют вам выполнять частичную загрузку страниц, и имеют одинаковые URL с javascript и без него.
Например, скажем, ваш базовый URL равен http://site.com/
С помощью history.pushState вы можете использовать javascript, чтобы изменить страницу на javascript.htm
, чтобы URL-адрес изменился на http://site.com/javascript.htm
.
#!
URL-адреса работают только с javascript, потому что #fragment недоступен на стороне сервера.При использовании hashbangs ваш URL будет выглядеть примерно так: http://site.com/#javascript.htm
Обратите внимание, что !
не требуется.Поскольку вы можете установить что-либо после хеша, у вас также может быть URL http://site.com/#!/javascript.htm
.
К сожалению, поскольку IE не поддерживает history.pushState, вы должны иметь #!
URL в качестве запасного варианта.
Ни один из методов не ломает кнопку возврата, но URL-адреса должны быть настроены по-разному для каждого метода.
Хешбанги работают примерно так:
function change(){
//page update logic
}
//hashchange event binding
(typeof window.addeventListener === "function")
? window.addEventListener("hashchange", change, false)
: window.attachEvent("onhashchange", change);
//This is how the hash is set
location.hash = "hashstring";
//Accessing it returns the hashstring, with a #
location.hash; //returns #hashstring
History.pushState немного сложнее, так как вы сохраняете «состояние» страницы в объекте.
Вот несколько хороших ссылок на этот метод:
Оба метода требуют манипулирования страницей javascript.У меня есть пример таких URL-адресов.http://timshomepage.net/comic/ содержит ссылки на различные веб-комиксы и вставляет их в iframe на странице.При отключенном javascript ссылка будет выглядеть примерно так: http://timshomepage.net/comic/dilbert. С помощью history.pushState у меня может быть тот же самый URL.С отступлением от hashbang я получаю URL-адрес, подобный следующему: http://timshomepage.net/comic/#!/dilbert