不重新加载页面更新浏览器地址栏

3

我喜欢Facebook在滚动图片时更改浏览器地址栏的URL,并且它在IE7上运行的方式。然而,我只发现了如何在HTML5浏览器上实现它的信息,而我想支持IE7。

由于这是一个HTML5解决方案,因此需要以下操作:

window.history.pushState("object or string", "Title", "/new-url");

如果有其他可行的解决方案,就不要选择“is not an option”。

编辑

在任何哈希之前。

但是,真的存在吗?


1
有点相关:http://caniuse.com/#search=history - Tomasz Nurkiewicz
我所知道的在没有HTML5的情况下解决这个问题的唯一方法是history.js,但不幸的是它只支持IE8+。 - Bubbles
1个回答

5
我所知道的另一种选择是使用#hash片段来确定页面的“url”或“状态”,并使用hashchange事件,但它不支持IE7:http://caniuse.com/#search=hashchange。然而,有一些polyfills可以解决这个问题:http://benalman.com/projects/jquery-hashchange-plugin/。这是一个相当hacky的方法,并且它破坏了HTTP协议,因为它依赖于JavaScript输出正确的内容,但您可能不会在意这个:http://isolani.co.uk/blog/javascript/BreakingTheWebWithHashBangsHistory.js声称具有跨浏览器支持,尽管我没有使用过它(对HTML5浏览器使用history,对旧版浏览器使用hashchange):https://github.com/browserstate/History.js/

2
@Christian:没有支持历史记录 API,这是不可能的。 - Bergi
使用“哈希碰撞”技术的问题之一是,您的URL可能会像example.com/posts/post1#!posts/post2这样结束...它确实存在很多问题。基本上,“实际URL”通常整个哈希片段。 - Wesley Murch
基本上,当用户单击某个链接并在 iframe 中加载新内容时,我将使用此功能,因此 URL 不会更改,这使得无法链接到特定页面。 - user1537415
至少使用iframe时,您的后退和前进按钮将起作用。您始终可以使用具有正确URL的“分享”链接。人们通常会使用这些链接而不是复制/粘贴地址栏。我只是想说,如果不清楚,我不建议任何涉及读取哈希片段的解决方案。尽可能使用历史记录,并告诉IE去滚吧。 - Wesley Murch
是的,但如果刷新页面,页面就会丢失。 - user1537415
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接