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

如何从Chrome扩展程序获取当前标签页的sessionStorage?

解决Chrome扩展获取sessionStorage返回空对象的问题

嘿,我懂你现在的困扰——调用chrome.tabs.executeScript拿sessionStorage结果却只得到[{}],对吧?这其实是因为你漏了一个关键细节:Storage对象没法直接被序列化传递回扩展上下文。

问题根源

当你直接返回window.sessionStorage时,Chrome的脚本执行机制在序列化这个对象的时候,没办法正确提取它里面的键值对。因为sessionStorage是Storage接口的实例,它的属性是通过原型链动态暴露的,不是普通对象的可枚举自身属性,所以序列化后就变成了空对象。

修复方案

你需要在注入的脚本里,把sessionStorage的内容转换成普通JavaScript对象,这样就能被正确序列化并传递回来。这里有两种常用写法:

写法1:传统遍历方式(兼容性拉满)

function getSessionStorage() {
  const script = `
    const storageData = {};
    // 遍历sessionStorage所有键,逐个取出对应值
    for (let i = 0; i < sessionStorage.length; i++) {
      const key = sessionStorage.key(i);
      storageData[key] = sessionStorage.getItem(key);
    }
    storageData; // 返回转换后的普通对象
  `;
  
  chrome.tabs.executeScript({ code: script }, function(results) {
    console.log(results[0]); // 现在就能拿到完整的sessionStorage内容啦
  });
}

写法2:ES6简洁写法(现代浏览器适用)

如果你的目标环境支持ES6,可以用更清爽的方式转换:

function getSessionStorage() {
  const script = `
    // 把sessionStorage的键值对直接转成普通对象
    Object.fromEntries(Array.from(sessionStorage.entries()));
  `;
  
  chrome.tabs.executeScript({ code: script }, function(results) {
    console.log(results[0]);
  });
}

额外提醒:权限检查

别忘了在扩展的manifest.json里声明必要权限,比如activeTab(允许在当前激活标签页执行脚本)或者特定域名权限,否则脚本会执行失败:

{
  "manifest_version": 3, // 或根据你的扩展版本填2
  "permissions": ["activeTab"]
}

这样调整之后,你应该就能顺利获取到当前标签页的sessionStorage内容了!

内容的提问来源于stack exchange,提问作者itamar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:17:12