PushState方法:浏览器前端路由管理技术的进阶应用
随着网络技术不断发展,我们使用浏览器的方式阅读网页的形式越来越普及,尤其是随着互联网移动化的发展,移动端浏览更加便捷和广泛。因此,浏览器前端路由管理技术也成为越来越多网站的关注点。本文将介绍PushState方法,它可以让浏览器展现网站的不同状态,并且以URL地址的方式呈现。下面,我们将逐步剖析它的应用原理。
一、PushState方法与传统路由管理技术的区别
1.1 传统路由管理技术
传统路由管理技术使用hash符号加上相应状态的方式,完成前端路由的管理。例如,“www.***.com/page#state”,其中,hash符号后面的state表示当前的状态,可以通过window对象的onhashchange事件来监听hash值的改变,然后执行相应的操作。
但是,这种方式有一些不足之处。在Github、Angular.js等网站中,使用这种方式管理路由会造成在IE6、IE7等老版本的浏览器中出现#符号在地址栏中的闪烁问题,这一问题极大的降低了用户体验。同时,本质上来说,hash有语义化的问题,它是用来指导浏览器在页面内跳转的,不应该被用于管理前端路由。因此,就出现了PushStates方法进行替换。
1.2 PushState方法的优势
PushState方法可以在解决了旧版浏览器下参数传递和地址展示的问题后,提供更好的路由解决方案:
1.2.1 优雅的地址展示方式,不需要使用#或者传统的查询参数,展示方式与真实的URL相同,对搜索引擎更加友好;
1.2.2 可以做到在使用ajax的情况下,不需要刷新页面,通过pushState()方法,可以让页面不断变化,从而实现异步请求页面的内容;
1.2.3 可以更加细致的触发相应的状态,不仅仅是Hash的变化,而是通过监听popstate事件来触发状态的变化,这样就可以更加自由的控制页面的表现和行为;
1.2.4 可以提供更稳定的路由管理,因为将路由放在了URL当中,URL具有更强的稳定性,所以路由管理会变得更加稳定。
二、PushState方法的使用
2.1 pushState()
pushState(stateObj, title, url) 方法可以进行浏览器的存储历史,将一个指定状态的URL放入页面历史中。其中,stateObj是一个JavaScript对象,代表push进历史堆栈的数据;title是状态名称;:
history.pushState(state,stateTitle,url);
2.2 replaceState()
replaceState(stateObj, title, url) 方法可以替换当前网页的状态,而不会使浏览器重新加载。其使用方式与pushState()相同,只是它不会再将信息存在历史堆栈中,而是直接将当前URL直接替换成新的URL,达到更加灵活的记录状态的目的。
replaceState(state, stateTitle, url);
2.3 popstate事件
window.addEventListener('popstate', function (e) {
console.log(e.state);
});
在前面的介绍中,我们已经提到,当用户点击或者浏览器历史记录中的前进或者后退按钮的时候,会触发window对象的popstate事件,从而执行相应的回调函数。在回调函数内部,我们可以根据传递的事件参数的state对象内容,达到响应不同状态展现的目的,从而达到异步加载的效果。
三、总结
本文简单介绍了PushState方法,它能够非常好的解决hash管理方式的弊端。尤其是在现在移动APP的盛行趋势下,如何让浏览器呈现出简洁、美观、用户友好的移动应用体验,PushStates方法在前端路由管理实践中发挥了不可忽视的作用。虽然通过传统的路由管理方式,我们可以做到前端路由的基本功能,但是PushState方法的推出,将更加有效率的管理网站的状态,不断推动Web技术在向更高的水平进发。
注:本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即后台留言通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意