一个好的方法是使用pushState。
这允许您在现代浏览器上更改 url,同时仍停留在同一页面上(因此,在相同的 javascript 执行环境中)。
这个想法是将您的应用程序编写为经典的多页网站,然后使用事件处理 javascriptpushState
路由popstate
。
这具有主要优点:
- 您的完整网站仍有用户可以直接访问的唯一网址
- 因此它可以被搜索引擎索引
- 较旧的浏览器用户只需正常点击链接,并刷新整页,因此它会优雅地降级
处理历史是一个具有很多含义的深刻主题,因此您应该阅读有关它的文档(即使您使用帮助程序 javascript 框架为您处理它),但这里是基础知识:
$( 'a' ).click( function( event ){
// check if pushState is supported
if ( window.history && window.history.pushState ){
var $link = $( this );
event.preventDefault();
// change url
history.pushState( {}, '', $link.attr( 'href' ) );
// call your page change handler, which typically
// request content, add it in page and show it
// with animation - you're responsible of implementing
// this `change_page` method
change_page( $link.attr( 'href' ) );
}
});
// triggered when user press the back button
// *and* on page load
$(window).on( 'popstate', function(){
// does the page change
change_page( window.location.href );
});