devote / HTML5-History-API

HTML5 History API expansion for browsers not supporting pushState, replaceState
http://spb-piksel.ru
MIT License
1.02k stars 182 forks source link

Использование URL якорей (hash) (#) #5

Closed merkuriy closed 11 years ago

merkuriy commented 12 years ago

Нельзя считать единственным способом использования URL-якорей (hash) только для эмуляции работы переходов по страницам и разделам в HTML4 браузерах (например "#/about" для "/about" и "/news/auto" для "news/auto"). Ведь прямое назначения Якорей адреса, это когда он указывает на определённое место на странице (атрибут id html-тега) или указывает скрипту на то, что нужно поменять или сделать на странице, например указывает на определённый таб, или на определённый слайд в презентации или в hash вообще указываются значения выбранных параметров в большой сложной форме поиска (пример: "/search#age=20&political=5"). В последнем случае вообще будет удобно делиться такой ссылкой на определённое состояние формы поиска, а так же иметь удобный способ Prev/Next по истории браузера (состояниям сложной формы поиска).

Для таких случаев возможно лучше было бы иметь возможность в HTML4 браузерах устанавливать только hash с прямым назначением, т. е. когда history.pushState( null, null, "#age=20&political=5"); устанавливал бы такой адрес "{shema+host}{current-url-path}#age=20&political=5". Может какая-то настройка нужна, или передавать дополнительный параметр в pushState.

Но и с автоматическим редиректом (преобразование из HTML4 эмулированного вида в HTML5 вид) тоже стоит немного переобдумать. При вызове редиректа стоит наверно проверить параметр hash на присутствие параметра "type", и делать редирект только в этом случае. Так как якорь может использоваться по своему прямому назначению. Тогда можно было бы поставить параметр type в "!" и не бояться, что будет отредирекчено то, что не должно быть отредерекчино.

VladimirShestakov commented 12 years ago

А как можно в hash указать и путь и id тега, чтоб HTML5-History-API при редиректе вырезала только путь? Замечу, что в пути могут быть символы & =

devote commented 12 years ago

в моем случае в библиотеке реализовано псевдо-якорь, то есть ссылка в HTML5 браузерах: http://somesite.com/somepath/index.php?test=1#hash в HTML4 браузерах превращается в ссылку вида: http://somesite.com/#/somepath/index.php?test=1#hash тем самым получить текущий hash-фрагмент можно через history.location.hash который выдаст именно фрагмент #hash. Единственное что нужно реализовать это скроллинг страницы до нужного указателя при переходе по такой ссылке.

А вообще нужно хорошенько подумать над этим.

VladimirShestakov commented 12 years ago

Тогда ещё учитывать нужно, что в html ссылки могут быть относительными href="#tag_id"

devote commented 12 years ago

Тогда ещё учитывать нужно, что в html ссылки могут быть относительными href="#tag_id"

Это тоже учитывается, по крайней мере при разработке я учитывал подобные ссылки. Но жестких тестов не проводил, поэтому гарантии на то что все будет пахать идеально не дам.