В свои бородатые студенческие годы я читал, что JavaScript не умеет менять адрес ссылки в браузере по соображениям безопасности. Но видимо стандарты поменялись с приходом HTML5.
http://spoiledmilk.com/blog/html5-changing-the-browser-url-without-refreshing-page/
Список браузеров, поддерживающих history API:
http://caniuse.com/#search=history
Но встаёт вопрос - как поймать эвент перехода вперёд-назад в браузере? Вот решение:
(function(history){
var pushState = history.pushState;
history.pushState = function(state) {
if (typeof history.onpushstate == "function") {
history.onpushstate({state: state});
}
return pushState.apply(history, arguments);
}
})(window.history);
window.onpopstate = history.onpushstate = function(e) {
alert('bam!');
};