location对象 保存着当前加载文档的信息,也保存着把URL解析为离散片段后能够通过属性访问的信息。
location解析URL
http://foouser:barpassword@www.wrox.com:80/WileyCDA/?q=javascript#contents
属性 | 值 | 说明 |
---|---|---|
location.hash | “#contents” | URL散列值 |
location.host | “www.wrox.com:80” | 服务器名及端口号 |
location.hostname | “www.wrox.com” | 服务器名 |
location.href | “” | 当前加载页面的完整URL |
location.pathname | “/WileyCDA/” | URL中的路径或文件名 |
location.port | “80” | 请求的端口 |
location.protocol | “http:” | 页面使用的协议 |
location.search | “?q=javascript” | URL的查询字符串 |
location.username | “foouse” | 域名前指定的用户名 |
location.password | “barpassword” | 域名前指定的密码 |
location.origin | “http://www.wrox.com” | URL的源地址,只读 |
使用查询字符串
处理 location.search 获得的字符串。
①删除查询字符串开头的问号
②把查询字符串按 & 分割成数组,每个元素的形式为 name=value
③迭代这个数组,将每一个元素按照=分割成数组,这个数组第一项是参数名,第二项是参数值。
let getQuery = function(){
let qs = (location.search.length>0 ? location.search.substring(1) : "");
let args = {};
for(let item of qs.split("&").map(kv => kv.split("="))){
let name = decodeURIComponent(item[0]);
let value = decodeURIComponent(item[1]);
if(name.length){
atgs[name] = value;
}
}
return args;
}
通过location修改浏览器地址
assign
-
导航到新URL,同时在浏览器历史记录中增加一条记录
location.assign("http://baidu.com")
window.location 和 location.href 会执行与显示调用assign一样的操作
window.location("http://baidu.com")
location.href("http://baidu.com")
-
除了hash之外,只要修改location的一个属性,就会导致页面重新加载新URL
replace
- 重新加载后不增加历史记录
调用replace()之后,用户不能回到前一页
location.replace("http://baidu.com")
reload
- 重新加载当前显示的页面
调用reload()而不传参数,页面会以最有效的方式重新加载。也就是说如果页面自上次请求以来没有修改过,浏览器可能会从缓存中加载页面。
location.reload() // 重新加载,可能从缓存加载
location.reload(true) // 重新加载,从服务器加载