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,这里有一个演示
- 也许你在URL中寻找散列标签(比如twitter.com/!在家里搜索。Google有一个很好的关于如何对这些页面进行爬行的教程:support.google.com/webmasters/bin/…
您的问题可以通过实现历史API来解决,特别是使用pushState()方法。我建议在MDN中阅读它。还有一个名为history.js的一体式解决方案,它将帮助您轻松实现它的x-browser(如果浏览器不支持它,它将回退到url hashes #)。
下面是一个例子:
1
| history.pushState('', 'New Page Title', newHREF); |
不够兴奋?下面是一个鼓励您实现它的演示。
- 这似乎很有希望;我已经开始研究它了,而且很可能是我将使用的方法(history.js方法似乎更像是viable使它快速工作)。多谢,伙计!-)
- 作为后续行动,只想让你知道:它工作得很出色!-)
- 演示失败了。
- 真的。但是给出的关于history.js的例子很有魅力——所以,基本上不需要任何其他的例子。;-)
- @Jleagle,你说得对:)谢谢你告诉我,我用另一个更新了链接。
- @Kameleon医生,谢谢你的跟进。很高兴看到像你这样的问题海报。明确的问题,赞赏(不一定是赞成/接受),跟进。
- @Adnan我自己也是一个经常回答问题的人(并且尽可能喜欢编码),所以我知道你的意思:整个交互是我喜欢StackOverflow的一件事,使它成为编程人员最有价值的社区/资源之一。干杯!
- 这件事对IE有效吗?
- @IE10之前,IE不支持user1200125历史API。然而,history.js无缝地恢复到旧的onhashchange。
- 告诉我你是如何在你的个人资料xd中使用笑脸的。
我刚找到一个教程,它对我很有用,
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/