使用新的URL更新地址栏而不散列或重新加载页面

我或者梦想铬(开发通道)实现一种方式来更新地址栏通过JavaScript(path,而不是域),无需重新加载页面,或他们真的已经做到了这一点。

但是,我找不到我认为我阅读的文章。

我疯了还是有办法做到这一点(在Chrome中)?

PS我不是在谈论window.location.hash,等。 如果上述存在,这个问题的答案将是不真实的。

您现在可以在大多数“现代”浏览器中执行此操作!

这里是我读的原文(2010年7月10日发布): HTML5:更改浏览器URL而不刷新页面 。

要深入了解pushState / replaceState / popstate(也就是HTML5 History API), 请参阅MDN文档 。

TL; DR,你可以这样做:

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

查看我的答案修改URL而不重新加载页面的基本方法。

只改变哈希旧浏览器之后的内容

 document.location.hash = 'lookAtMeNow'; 

Chrome,Firefox,IE10 +更改完整的URL(域和协议必须与原来的一样!)

 history.pushState('data to be passed', 'Title of the page', 'https://stackoverflow.com/test'); 

以上将添加一个新的历史logging,所以你可以按返回button转到以前的状态。 要更改url而不添加新的条目到历史使用

 history.replaceState('data to be passed', 'Title of the page', 'https://stackoverflow.com/test'); 

尝试在控制台中运行这些!

更新到大卫答案甚至检测浏览器不支持pushstate:

 if (history.pushState) { window.history.pushState("object or string", "Title", "/new-url"); } else { document.location.href = "/new-url"; }