在现代浏览器和HTML5中,有一种称为pushState
window 的方法history
。这将更改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');
您也可以更改#
for <HTML5 browsers
,不会重新加载页面。这就是Angular用来做SPA的方式根据标签 ...
更改#
非常容易,例如:
window.location.hash = "example";
您可以像这样检测到它:
window.onhashchange = function () {
console.log("#changed", window.location.hash);
}