Hashbang против URI-разбора

Я хочу перевести свой сайт в полную загрузку асинхронных документов, но я не хочу использовать #! метод обработки запросов, потому что 1) я не хочу разрывать ссылки, и 2) я хочу более гибкий способ обработки URI, которые получает сайт.

Мне удалось создать легкий MVC для моего сайта, который позволяет использовать URL в общем стиле (например, http://ddrewdesign.com/blog/jquery-is-or-is-child-of-function), чтобы сделать правильные запросы.

Мой вопрос: это было тривиально легко сделать. Что мне не хватает? Почему Gawker и Google выбрали #! когда этот метод кажется более понятным с точки зрения пользовательского опыта?

РЕДАКТИРОВАТЬ

Для пояснения, первоначально мой сайт использовал исключительно метод строки запроса (нет mod_rewrite) получения запросов. Эти ссылки есть по всей сети, и я не могу их сломать. Я понимаю, что они будут, если я перейду к использованию метода hashbang. Опять же: это может быть частью моего замешательства, поэтому я не говорю, что я все объяснил. Я спрашиваю, что мне не хватает, потому что ничего из того, что я читал до сих пор, не создавало впечатление, что я могу приспособить эту строку запроса.

1 ответ

Решение

Я думаю, что вы ищете 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-адреса должны быть настроены по-разному для каждого метода.

Hashbangs работают примерно так:

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/ содержит ссылки на различные веб-комиксы и вставляет их в фрейм на странице. При отключенном javascript ссылка будет выглядеть примерно так: http://timshomepage.net/comic/dilbert. С помощью history.pushState у меня может быть тот же самый URL. С резервным хэшбэнгом я получаю URL-адрес, подобный следующему: http://timshomepage.net/comic/

Другие вопросы по тегам