千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > onhashchange事件详解

onhashchange事件详解

来源:千锋教育
发布人:xqq
时间: 2023-11-24 20:56:09 1700830569

开发网页时,我们常常需要获取浏览器当前的状态并根据它来修改网页内容。常用的方法是监听浏览器地址栏的变化。在过去我们可能需要一直进行轮询等待地址栏状态的改变,但现在浏览器提供了一个更好的方法,那就是使用onhashchange事件。

一、onhashchange不触发

想要正确使用onhashchange事件,我们需要先理解它的触发条件。onhashchange事件只会在浏览器的hash值发生改变时触发,比如通过点击链接跳转、前进后退按钮等方式改变hash值。如果hash值不变,则事件不会触发,这也是很多开发人员会出现onhashchange不触发的状况。

举个例子,如果我们通过以下代码更改hash值:


window.location.hash = 'newHash';

这种方式是不会触发onhashchange事件的。

二、onhashchange事件什么时候触发

当我们通过浏览器的前进后退按钮,或是手动修改地址栏中的hash值,onhashchange事件会被触发,此时我们可以通过event对象获取到相关信息。


window.onhashchange = function(event) {
  console.log(event.oldURL); // 改变前的URL
  console.log(event.newURL); // 改变后的URL
}

请注意,这里的oldURL和newURL可能并不包含hash部分。如果想要获取具体的hash值,可以通过window.location.hash来获取。

三、onhashchange事件

在实际开发中,我们可以利用onhashchange事件来实现一些有趣的功能。比如,当我们需要在页面内添加一个类似于浏览器的前进后退按钮时,可以通过onhashchange事件来监听地址栏的变化,并随时更新页面内容。


window.onhashchange = function() {
  if(window.location.hash === '#page1') {
    // 更新页面内容
  } else if(window.location.hash === '#page2') {
    // 更新页面内容
  } else {
    // 更新页面内容
  }
}

另外,当我们需要实现一些单页面应用或是通过hash值进行路由控制时,也可以通过onhashchange事件来监听地址栏的变化,并根据hash值做出相应的操作。

四、onhashchange用法

除了监听hash值的变化外,onhashchange事件还可以用于处理一些浏览器兼容性问题。比如,在IE8及以下的浏览器中,hash值的变化不会触发window.onhashchange事件。此时我们可以通过以下方式来模拟hash值的变化,从而达到同样的效果:


setInterval(function () {
  if (window.location.hash !== hash) {
    hash = window.location.hash;
    window.onhashchange && window.onhashchange();
  }
}, 100);

这里使用setInterval函数来模拟hash值的变化,如果发现hash值发生了变化,则手工触发onhashchange事件。

五、onhashchange兼容性

onhashchange事件最初是在HTML5规范中引入的,因此在早期的IE浏览器中并不支持该事件。不过我们可以通过以下方法来进行兼容性处理:


if (!("onhashchange" in window)) {
  window.onhashchange = function(event) {
    console.log(event.oldURL); // 改变前的URL
    console.log(event.newURL); // 改变后的URL
  }
}

这里判断了浏览器是否支持onhashchange事件,如果不支持,则手动添加事件处理函数。

六、onhashchange什么意思

onhashchange事件是一个DOM Level 2事件,它和window对象紧密相关,当浏览器url中的hash值发送变化时,onhashchange事件会被触发,开发人员可以在事件的回调函数中实现一些自定义的操作。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT