关于javascript:如何在不重新加载的情况下动态更改URL?

How to dynamically change URL without reloading?

本问题已经有最佳答案,请猛点这里访问。

好吧,这就是我想做的(我认为谷歌也会这样做):

场景A:

/Main_Page页中,我们假设有3个部分。当用户单击A部分"链接"时,section A的内容通过Ajax加载并嵌入到页面中。

方案B:

当加载/Main_Page/Section_A时,我们实际上转到非常相同的页面(与场景A中的情况一样)-/Main_Page并通过ajax加载section A-与以前一样。

问题:

我们有两个相同的结果页面,但是URL是不同的(在第一种情况下,它只是/Main_Page,而在第二种情况下,它是/Main_Page/Section_A

我想做的是:

  • 在场景A中,在通过Ajax加载section A之后,我应该怎么做才能使出现的URL(在浏览器地址栏中)是/Main_Page/Section_A或其他任何内容,而不需要任何类型的重定向、页面重新加载等?


您的问题可以通过实现历史API来解决,特别是使用pushState()方法。我建议在MDN中阅读它。还有一个名为history.js的一体式解决方案,它将帮助您轻松实现它的x-browser(如果浏览器不支持它,它将回退到url hashes #)。

下面是一个例子:

1
history.pushState('', 'New Page Title', newHREF);

不够兴奋?下面是一个鼓励您实现它的演示。


我刚找到一个教程,它对我很有用,

1
2
3
4
5
6
7
8
9
10
$('a').click(function(){
var value = $(this).attr('id');
window.location.hash = value; // it appends id to url without refresh
});


$(window).bind('hashchange' function() {
    var newhash = window.location.hash.substring(1) // it gets id of clicked element
    // use load function of jquery to do the necessary...
});

上面的代码是从http://css-tricks.com/video-screencasts/85-best-practices-dynamic-content/