Кто-нибудь знает библиотеку, которая определяет, можно ли использовать pushState?
Я использовал это:
if(window.history.pushState){
window.history.pushState(null, document.title, path);
}else{
location.pathname = path;
}
Но я только что обнаружил, что в Safari 5.0 есть ошибка.2 это приводит к тому, что он не работает, даже несмотря на то, что вышеупомянутый тест проходит: http://support.github.com/discussions/site/2263-line-links-broken.
Я думаю, что могут быть другие ошибки, и кто-то, вероятно, уже нашел их и завернул их, но я не нашелеще ничего.
Редактировать: @Crescent Fresh
Из того, что я видел, кажется, что pushState помещает стек истории и изменяет URL, но не обновляетlocation.pathname.В моем коде я использую setInterval, чтобы проверить, обновился ли путь.
var cachedPathname = location.pathname;
if(window.history.pushState){
cachedPathname = location.pathname;
setInterval(function(){
if(cachedPathname !== location.pathname){
cachedPathname = location.pathname;
//do stuff
}
}, 100);
}
В Safari 5.0.2 location.pathname не изменяется, когда pushState изменяет URL-адрес.Это работает в других браузерах и версиях Safari.