BOM中Location对象详解及#锚点用法详析 | Felix-cao Blog GitHub项目

BOM(浏览器对象模型)中最有用的对象之一就是 location。
Location 对象是很特别的对象,由于它既是 window 对象的属性,也是 document 对象的属性。
Location 对象包含有关当前 URL 的信息, Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问。

一、Location Hash属性

Location 对象的 hash 属性是一个可读可写的字符串,该字符串是 URL 的锚部分(从 # 号开始的部分)。

hash 哈希值。设置或返回从井号 (#) 开始到 URL结束的值。可以用它来记录页面的状态。若页面存在某个链接的 name 的值与 hash 值是一样的,页面载入时,浏览器会滚动到该链接的位置。 需要注意的是,如果URL中不带#,则 hash 值为空字符串,否则,hash值为#以及到URL结束的值。

二、#的涵义

#代表网页中的一个位置。其右面的字符,就是该位置的标识符。列如:

http://up8.wang/2018/03/29/js/js-location/#print

就代表网页当前页面的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。

为网页位置指定标识符,有两个方法。一是使用锚点,列如<a name=”print”></a>,二是使用id属性,列如<div id=”print”>。

这里是一个#锚点,名称为print2, 方便本文测试

三、HTTP请求不包括#

#是用来指导浏览器动作的,对服务器端完全无用。所以,HTTP请求中不包括#。列如,访问下面的网址,

http://up8.wang/2018/03/29/js/js-location/#print

浏览器实际发出的请求是这样的:

  GET http://up8.wang/2018/03/29/js/js-location/ HTTP/1.1

  Host: up8.wang

可以看到,只是请求/2018/03/29/js-location/,根本没有”#print”的部分。

四、#后的字符

在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送到服务器端。列如,下面URL的原意是指定一个颜色值:

  http://up8.wang/2018/03/29/js/js-location/?color=#fff

但是,浏览器实际发出的请求是:

  GET /?color= HTTP/1.1

  Host: up8.wang

可以看到,”#fff”被省略了。只有将#转码为%23,浏览器才会将其作为实义字符处理。也就是说,上面的网址应该被写成:

  http://up8.wang/2018/03/29/js/js-location/?color=%23fff

五、改变#不触发网页重载

单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页。列如,从

  http://up8.wang/2018/03/29/js/js-location/#print

改成

  http://up8.wang/2018/03/29/js/js-location/#print2

浏览器不会重新向服务器请求。

六、改变#会改变浏览器的访问历史

每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用”后退”按钮,就可以回到上一个位置。这对于 ajax 应用程序特别有用,可以用不同的#值,表明不同的访问状态,然后向用户给出可以访问某个状态的链接。

值得注意的是,上述规则对IE 6和IE 7不成立,它们不会由于#的改变而增加历史记录。

七、window.location.hash读取#值

window.location.hash 这个属性可读可写。读取时,可以用来判断网页状态是否改变;写入时,则会在不重载网页的前提下,创造一条访问历史记录。

八、onhashchange事件

这是一个HTML 5新增的事件,当#值发生变化时,就会触发这个事件。IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+ 支持该事件。

Reference

  • Location 对象

这里是一个#锚点,名称为print, 方便本文测试

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容