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