修改网址而不重新加载页面
有什么方法可以修改当前页面的URL而无需重新加载页面?
如果可能,我想访问#哈希前的部分。
我只需要更改域后的部分,所以它不像我违反跨域策略。
window.location.href = "www.mysite.com/page2.php"; // sadly this reloads
现在可以在Chrome,Safari,FF4 +和IE10pp4 +中完成!
有关详情,请参阅此问题的答案:使用新网址更新地址栏,而不使用散列或重新加载页面
例:
function processAjaxData(response, urlPath){
document.getElementById("content").innerHTML = response.html;
document.title = response.pageTitle;
window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", urlPath);
}
然后,您可以使用window.onpopstate
检测后退/前进按钮导航:
window.onpopstate = function(e){
if(e.state){
document.getElementById("content").innerHTML = e.state.html;
document.title = e.state.pageTitle;
}
};
有关操纵浏览器历史记录的更深入的介绍,请参阅此MDN文章。
HTML5引入了history.pushState()
和history.replaceState()
方法,它们分别允许您添加和修改历史记录条目。
window.history.pushState('page2', 'Title', '/page2.php');
从这里阅读更多关于此的信息
注意:如果您使用的是HTML5
浏览器,那么您应该忽略此答案。 现在可以在其他答案中看到这一点。
没有重新加载页面的情况下,无法在浏览器中修改URL
。 该网址代表了上次加载的网页的内容。 如果你改变它( document.location
),那么它将重新加载页面。
一个明显的原因是,您在www.mysite.com
上撰写了一个类似银行登录页面的网站。 然后你改变浏览器的url栏来说www.mybank.com
。 用户完全不知道他们真的在看www.mysite.com
。