BOM-location

发布时间 2023-04-20 09:28:08作者: 挖洞404

1、介绍

window.location对象,用于获得当前框架的地址 (URL),并把框架地址重定向到新的页面。

框架一般指浏览器,但有时也指iframe框架。

(1)属性

location.hostname 返回web主机的域名
location.pathname 返回当前页面的路径和文件名
location.port 返回web主机的端口
location.protocol 返回使用的web协议
location.href 返回当前页面的url

(2)方法

location.assign("url") 加载新的文档,相当于超链接跳转
location.replace("url") 加载新的文档替换当前文档,相当于新窗口,所以没有后退上一页
  • 可以设置绝对路径,也可以是根路径或相对路径

(3)document.location

document.location和window.location是完全等价的。

alert(document.location===window.location)//true

2、属性

(1)location.hash

location.hash
  • 可以获取框架url中hash部分,类型是string
  • 如果hash部分没有或者是#,则返回空字符串,其他情况返回包含#前缀
location.hash=155
location.hash='#abc'
  • 可以设置hash部分,赋值类型可以是任意的,会转为字符串,并自动添加前缀#
  • 如果手动添加了前缀#,并不会重复为##,而是只有一个
  • 设置hash部分,并不会进行网络请求

(2)location.protocol

location.protocol
  • 可以获取框架url中protocol部分,即协议,类型是string
  • 值为http:或者https:,包含:字符
location.protocol='https'
  • 可以设置protocol部分,如果是赋值与当前协议相同,不会进行网络请求,而与当前协议不同,则会发起网络请求进行重定向
  • 设置时,https和https:等效,http和http:等效,且大小写不敏感,如果发起请求,转为小写。

(3)location.hostname

location.hostname
  • 获取框架url中主机名称,类型是string,可能是ip的形式127.0.0.1,也可能是特殊的localhost,还可能是域名a.b.com
location.hostname='127.0.0.1'
  • 可以设置主机名称部分,如果与当前值相同,不会发起网络请求,不同,则会发起网络请求。
  • 注意,比较的是字面值,localhost和127.0.0.1是不同的,但不区分大小写,如果发起请求,转为小写。比如localhost和LocalHost是相同的。

(4)location.port

location.port
  • 获取框架中url的端口,类型也是string。比如8843
  • 如果是协议的默认端口,框架中url不显示,则值返回空字符串
  • 浏览器会自动隐去协议的默认端口,所以不讨论框架中协议的默认端口显示的情况
location.port = 888
location.port = '888'
  • 可以设置端口部分,数值类型或者字符串均可。只要设置即会发起网络请求
  • 如果是与协议相同的默认端口,请求时不会携带端口号

(5)location.host

location.host
  • 获取框架中url的主机名和端口部分,类型是string。比如127.0.0.1:8843
  • 如果端口是协议默认端口,则返回不包含端口部分,比如127.0.0.1
location.host = '127.0.0.1'
location.host = '127.0.0.1:8080'
  • 可以设置主机名和端口部分,只要设置即会发起网络请求
  • 注意设置时,主机名和端口之间只有一个:字符,不能添加空格,否则设置仅主机名有效

(6)location.pathname

location.pathname
  • 获取框架中url的目录和文件名部分,类型是string。比如/a/b.html
location.pathname='/a/ab'
location.href='a/test3.html'
  • 可以设置目录和文件名部分,只要设置即会发起网络请求
  • 设置为空字符串,会默认添加/,进行请求
  • 而设置为路径/a形式时,不会默认追加/
  • 以/开头是设置根路径,不以/开头是设置相对路径
  • 设置路径中包含某些ascii字符或非ascii字符,会自动进行url编码,然后请求

(7)location.search

location.search
  • 获取框架中url的参数部分,类型是string
  • 如果没有或者是仅有一个字符?,则返回空字符串,其他请求,都会返回包含前缀?在内的参数部分。比如?a
  • 获取时,会对键和值中某些ascii字符和非ascii字符进行url编码。不会对%进行编码
?a=%27"`%20;,.[](){}<>/|\-+=&&
?a=%27%22`%20;,.[](){}%3C%3E/|\-+=&&

location.search='abc'
location.search='?abc世界'
  • 可以设置参数部分,只要设置即会发起网络请求
  • 可以添加?前缀,也可以不添加,js会自动判断处理,添加?前缀,也不会出现??的情况
  • 设置之后,发起请求之间,会对参数部分的某些ascii字符和非ascii字符进行url编码。
  • 由于不会对%编码,所以也可以是提前手动进行url编码然后赋值

(8)location.href

location.href
  • 获取框架中url的整体,包括hash部分,类型是string
  • 该值会对路径、参数、hash中某些ascii字符和非ascii字符进行url编码
  • 如果hash为空,则其部分返回空字符串,为#,则其部分返回#。参数部分的?也是如此
location.href= 'http://127.0.0.1:8843/b/test2.html'
location.href='/test3.html'
location.href='a/test3.html'
  • 可以设置url整体,只要设置即会发起网络请求
  • 一般设置过程,必须包含http或者https
  • 如果没有协议头部,则相当于对当前框架url设置相对路径(不以/开头)或者根路径(以/开头)

(9)location

location
  • location本身是一个object对象,直接读取对象,是返回locaiton.href的值
location= 'http://127.0.0.1:8843/b/test2.html'
location='/test3.html'
location='a/test3.html'
  • 可以参照location.href的规则设置