有没有一种方法可以在不重新加载页面的情况下修改当前页面的URL?
如果可能,我想访问#哈希之前的部分。
我只需要更改域之后的部分,所以我不会违反跨域策略。
window.location.href = "www.mysite.com/page2.php"; // this reloads
有没有一种方法可以在不重新加载页面的情况下修改当前页面的URL?
如果可能,我想访问#哈希之前的部分。
我只需要更改域之后的部分,所以我不会违反跨域策略。
window.location.href = "www.mysite.com/page2.php"; // this reloads
当前回答
下面是在不重新加载页面的情况下更改URL的功能。它仅支持HTML5。
function ChangeUrl(page, url) {
if (typeof (history.pushState) != "undefined") {
var obj = {Page: page, Url: url};
history.pushState(obj, obj.Page, obj.Url);
} else {
window.location.href = "homePage";
// alert("Browser does not support HTML5.");
}
}
ChangeUrl('Page1', 'homePage');
其他回答
如果你想做的是允许用户为页面添加书签/共享页面,而你不需要它恰好是正确的URL,并且你没有使用哈希锚来做任何其他事情,那么你可以分两部分来做;您使用该位置。然后在主页上执行检查,以查找其中包含哈希锚的URL,并将您重定向到后续结果。
例如:
用户位于www.site.com/section/page/4用户执行一些操作,将URL更改为www.site.com/#/section/page/6(带有哈希)。假设您已将第6页的正确内容加载到页面中,因此除了哈希之外,用户不会受到太大的干扰。用户将此URL传递给其他人,或为其添加书签其他人或同一用户稍后会访问www.site.com/#/ssection/page/6www.site.com/上的代码使用如下方式将用户重定向到www.site.com/section/page/6:
if (window.location.hash.length > 0){
window.location = window.location.hash.substring(1);
}
希望这是有意义的!对于某些情况,这是一种有用的方法。
在现代浏览器和HTML5中,有一种叫做pushState的窗口历史记录方法。这将更改URL并将其推送到历史记录中,而无需加载页面。
您可以这样使用它,它需要3个参数,1)状态对象2)标题和URL):
window.history.pushState({page: "another"}, "another page", "example.html");
这将更改URL,但不会重新加载页面。此外,它不会检查页面是否存在,因此如果您执行一些对URL做出反应的JavaScript代码,您可以这样处理它们。
此外,还有history.replaceState(),它做了完全相同的事情,只是它将修改当前历史,而不是创建新的历史!
此外,您还可以创建一个函数来检查history.pushState是否存在,然后执行以下操作:
function goTo(page, title, url) {
if ("undefined" !== typeof history.pushState) {
history.pushState({page: page}, title, url);
} else {
window.location.assign(url);
}
}
goTo("another page", "example", 'example.html');
此外,您可以更改<HTML5浏览器的#,这不会重新加载页面。这是Angular根据标签进行SPA的方法。。。
更改#非常简单,比如:
window.location.hash = "example";
你可以这样检测:
window.onhashchange = function () {
console.log("#changed", window.location.hash);
}
这段代码对我很有用。我在ajax应用程序中使用了它。
history.pushState({ foo: 'bar' }, '', '/bank');
一旦使用ajax将页面加载到ID中,它会自动更改浏览器url,而无需重新加载页面。
这是下面的ajax函数。
function showData(){
$.ajax({
type: "POST",
url: "Bank.php",
data: {},
success: function(html){
$("#viewpage").html(html).show();
$("#viewpage").css("margin-left","0px");
}
});
}
示例:从任何页面或控制器(如“Dashboard”),当我单击银行时,它会使用ajax代码加载银行列表,而无需重新加载页面。此时,浏览器URL将不会更改。
history.pushState({ foo: 'bar' }, '', '/bank');
但是当我在ajax中使用这段代码时,它会在不重新加载页面的情况下更改浏览器url。下面是完整的ajax代码。
function showData(){
$.ajax({
type: "POST",
url: "Bank.php",
data: {},
success: function(html){
$("#viewpage").html(html).show();
$("#viewpage").css("margin-left","0px");
history.pushState({ foo: 'bar' }, '', '/bank');
}
});
}
只需使用,它不会重新加载页面,只会重新加载URL:
$('#form_name').attr('action', '/shop/index.htm').submit();
您的新url。
let newUrlIS = window.location.origin + '/user/profile/management';
在某种意义上,调用pushState()类似于设置window.location=“#foo”,因为两者都会创建并激活与当前文档相关的另一个历史条目。但是pushState()有一些优点:
history.pushState({}, null, newUrlIS);
您可以签出根目录:https://developer.mozilla.org/en-US/docs/Web/API/History_API