Vanilla JS项目中,调用history.go(-1)返回上一页时如何触发函数?
解决返回上一页触发函数的问题
你当前代码存在两个核心问题:
window.onload = isUpdated()是直接执行函数并将返回值(undefined)赋值给onload,正确写法应为绑定函数引用window.onload = isUpdated- 浏览器返回时,页面可能从**bfcache(往返缓存)**中恢复,此时
window.onload不会触发,需要用pageshow事件处理这种场景
具体实现方案
直接监听pageshow事件,它会在页面加载(包括首次加载和从缓存恢复)时触发,完全覆盖你的需求:
const isUpdated = () => { const profileUpdated = localStorage.getItem('profileUpdated') if (profileUpdated) { let res = JSON.parse(profileUpdated) localStorage.removeItem('profileUpdated'); alertBanner.innerText = res.message; alertBanner.parentElement.classList = 'alert green-alert'; } } // 绑定pageshow事件,覆盖首次加载和浏览器返回场景 window.addEventListener('pageshow', isUpdated); // 若需兼容旧场景,可保留onload(可选,pageshow已包含首次加载逻辑) // window.onload = isUpdated;
补充说明
- 在资料更新页面完成操作后,执行
localStorage.setItem('profileUpdated', JSON.stringify({message: '资料更新成功'})),再调用history.back()返回上一页即可触发提示 - 若需要区分页面是否从缓存恢复,可在函数内利用
pageshow事件的persisted属性判断:const isUpdated = (event) => { if (event.persisted) { // 页面从缓存恢复(浏览器返回触发) } // 剩余逻辑不变 }
内容的提问来源于stack exchange,提问作者abhijith v
相关产品推荐
相关产品推荐

