有没有办法在不重新加载页面的情况下修改当前页面的URL?
我想访问该部分 之前 #hash如果可能的话。
我只需要改变部分 后 域名,所以它不像我违反跨域政策。
window.location.href = "www.mysite.com/page2.php"; // sadly this reloads
有没有办法在不重新加载页面的情况下修改当前页面的URL?
我想访问该部分 之前 #hash如果可能的话。
我只需要改变部分 后 域名,所以它不像我违反跨域政策。
window.location.href = "www.mysite.com/page2.php"; // sadly this reloads
现在可以在Chrome,Safari,FF4 +和IE10pp4 +中完成!
有关详细信息,请参阅此问题的答案: 使用新URL更新地址栏,不使用哈希或重新加载页面
例:
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
在浏览器中没有重新加载页面。 URL表示上次加载的页面的内容。如果你改变它(document.location
)然后它将重新加载页面。
一个显而易见的原因是,你写了一个网站 www.mysite.com
看起来像银行登录页面。然后你改变浏览器的URL栏来说 www.mybank.com
。用户将完全不知道他们真的在看 www.mysite.com
。
您也可以使用HTML5 replaceState 如果要更改URL但不想将条目添加到浏览器历史记录中:
if (window.history.replaceState) {
//prevents browser from storing history with each change:
window.history.replaceState(statedata, title, url);
}
这将“打破”后退按钮功能。在某些情况下可能需要这样做,例如图像库(您希望后退按钮返回到图库索引页面而不是向后移动您查看的每个图像),同时为每个图像提供其自己唯一的URL。
parent.location.hash = "hello";
这是我的解决方案:( newUrl是你想要替换当前新url的新url)
history.pushState({}, null, newUrl);
正如Vivart和geo1701已经提到的那样,HTML5 replaceState就是答案。但是并非所有浏览器/版本都支持它。 History.js 包装HTML5状态功能并为HTML4浏览器提供额外支持。
在HTML5之前我们可以使用:
parent.location.hash = "hello";
和:
window.location.replace("http:www.example.com");
此方法将重新加载您的页面,但HTML5引入了 history.pushState(page, caption, replace_url)
不应重新加载您的页面。
如果您要做的是允许用户书签/共享页面,并且您不需要它是完全正确的URL,并且您没有使用哈希锚点来处理其他任何内容,那么您可以在两个中执行此操作部分;您使用上面讨论的location.hash,然后在主页上实现检查,以查找其中包含哈希锚的URL,并将您重定向到后续结果。
例如:
1)用户已开启 www.site.com/section/page/4
2)用户执行一些将URL更改为的操作 www.site.com/#/section/page/6
(用哈希)。假设您已将第6页的正确内容加载到页面中,因此除了哈希之外,用户不会受到太多干扰。
3)用户将此URL传递给其他人,或对其进行书签
4)其他人,或以后的同一用户,去 www.site.com/#/section/page/6
5)代码 www.site.com/
将用户重定向到 www.site.com/section/page/6
,使用这样的东西:
if (window.location.hash.length > 0){
window.location = window.location.hash.substring(1);
}
希望有道理!对于某些情况,这是一种有用的方法。
该位置的任何变化(或者 window.location
要么 document.location
)如果您不仅仅是更改URL片段,将会对该新URL发出请求。如果更改URL,则更改URL。
使用服务器端URL重写技术 Apache的mod_rewrite 如果您不喜欢您当前使用的网址。