Chrome更新到89版本后,sessionStorage丢失。a-label跳转丢失。同源浏览器窗口可以共享使用localStorage存储的数据。sessionStorage的作用范围:只存在于当前session页面。当会话结束时,数据也被销毁并在不同的浏览器窗口中共享。即存在于当前浏览器页面中,关闭页面时数据将被删除。(注意:鼠标右键打开的新标签页不能共享sessionStorage。)关于sessionStorage,大家可能总是有一个误解。在Chrome浏览器89版本之前,当前会话页面指的是浏览器窗口未关闭时窗口中的同一个会话。域网站可以共享此数据(同源浏览器的多个窗口不共享)。当所有页面关闭或者窗口关闭时,sessionStorage数据就会被销毁,所以使用a标签跳转或者js跳转都会共享sessionStorage。2021年3月初,Chrome浏览器进行了批量更新。更新到89版本后,通过a标签target="_blank"跳转到新页面时sessionStorage会丢失。Chrome的这次更新可能会导致很多网站的sessionStorage丢失,页面可能会直接崩溃。解决方法如下:1、最简单的解决方法——给a标签加上属性rel="opener"。在旧版Chrome中,使用a标签target="_blank"跳转到新页面时,新页面的window对象上有opener属性,新页面会得到上一个页面的控制权,就会出现安全问题。Noopener可以解决这个问题。设置后,新页面的window.opener将为空。更新后Chrome默认给a标签加上noopener属性,这样跳转a标签就会失去对新页面的控制,sessionStorage自然也就丢失了。我们只需要在a标签中添加rel="opener"即可。向上。保留sessionStorage如果你使用的是react-router或者vue-router,也可以直接在Link中加上rel="opener"。js方法-window.open这里通过a标签target="_blank"跳转到新页面的方法会丢失sessionStorage。如果你使用window.open,你就不用担心这个问题。您可以将onclick事件绑定到菜单标签。3、改变存储方式——cookie/localStorage不太好,一是因为变化可能比较大,二是cookie能存储的数据量比sessionStorage小。如果存储的只是id之类的,可以换成cookies,但是存储用户数据对象就不太好了。但是,在使用localStorage存储时,必须考虑安全问题。即使localStorage关闭了浏览器,数据仍然会保留在本地。
