获取浏览器url的各类值
在日常的前端开发过程中,我们不可避免地会遇到一些场景:在js中判断浏览器url中地各类值分别是什么,或者直接改变他们的值向服务器发起请求。在这些场景中我们需要打交道的一个对象就是window.location,通过window.location,我们可以实现一下几种需求
- 导航到一个新页面
- 强制从服务器重新加载当前页面
- 通过修改search属性向服务器发送字符串数据
- 获取window.location.search的键值,以实现我们的特殊需求
下面我们就来讲讲这几种需求的实现方式:
导航到一个新页面
事实上,window.location是一个只读location对象,但我们仍然可以通过他改变浏览器中的url值,从而导航到一个新页面:
window.location.assign("https://google.com")
window.location = "https://google.com" // 这两种方式都是可以实现导航到新页面的
强制从服务器重新加载页面
这个需求的场景其实我遇到过很多次,当我们的异步请求成功了,但是也页面中还存在着缓存,用户刷新的时候还是停留在异步请求之前的场景中,这时候我们就可以考虑一下使用这种方式了,reload方式会废弃缓存,强制从服务器中请求一遍页面的所有资源
window.location.reload(true)
通过修改search属性向服务器发送数据
举例应用场景:
function sendData (data) {
window.location.search = data
}
// html中的埋点:
// <button onclick="sendDaata("hello")"></button>
当url带上我们指定的数据(”hello”),被发送到服务端,如果服务端不处理(没有响应),则使用修改后的查询字符串重新加载文档
获取window.location.search的一个键值
function loadPageVar (sVar) {
return decodeURI(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURI(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}
获取url中的查询参数
var oGetVars = {};
if( window.location.search.length > 1 ){
for (var aItKey, nKeyId = 0, aCouples = window.location.search.substr(1).split("&");nKeyId < aCouples.length; nKeyId++) {
aItKey = aCouples[nKeyId].split("=");
oGetVars[decodeURIComponent(aItKey)] = aItKey.length > 1 ? decodeURIComponent(aItKey[1]) : "";
}
}