You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:57:02