sessionStorage.getItem返回值调用focus提示不是函数是什么原因?
问题根因
- Web Storage(包含sessionStorage和localStorage)仅支持存储字符串类型数据,所有非字符串类型的值存入时都会被强制调用
toString()方法转为字符串后存储。 - 你存入的
newTab是window.open()返回的Window对象引用,存入sessionStorage时会被转成类似"[object Window]"的普通字符串,后续从sessionStorage取出的也只是这个字符串,自然不存在focus()方法,因此抛出类型错误。
正确实现方案
把打开的标签页引用存在当前页面的内存变量中即可,不需要走sessionStorage存储:
// 用Map存储对应URL和打开的标签页引用 const openedTabs = new Map(); const url = uniqueUrlEveryTime; if (!openedTabs.has(url)) { const newTab = window.open(url, '_blank'); openedTabs.set(url, newTab); newTab.focus(); } else { openedTabs.get(url).focus(); }
- 额外说明:如果当前页面被刷新,内存中存储的
openedTabs会被清空,无法再控制之前打开的标签页,这是浏览器安全沙箱的限制,没有通用的跨刷新控制方案。
内容的提问来源于stack exchange,提问作者tRuEsAtM
相关产品推荐
相关产品推荐

