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

Chrome扩展Manifest V3内容脚本无法访问chrome.storage.session求助

Chrome Manifest V3内容脚本无法访问chrome.storage.session的原因及解决方法

核心原因

Manifest V3 对chrome.storage.session的访问权限做了严格限制:

  • chrome.storage.session是扩展内部专用的会话级存储,仅允许在后台服务工作者(Service Worker)、弹出页、选项页这类属于扩展自身的隔离上下文中调用。
  • 内容脚本是注入到目标网页的脚本,属于网页上下文而非扩展内部上下文,因此没有权限直接访问chrome.storage.session。哪怕在manifest.json中声明了storage权限,也仅能让内容脚本访问chrome.storage.local和chrome.storage.sync,不包含session。

解决方法

方法1:通过消息通信让后台脚本代理读取

借助扩展的消息通信机制,让有权限的后台脚本帮忙读取session数据,再将结果返回给内容脚本:

  1. 后台脚本(service-worker.js)添加消息监听:
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.action === 'getSessionData') {
    chrome.storage.session.get(['data']).then(data => {
      sendResponse(data);
    });
    // 异步操作需返回true,保持消息通道开放
    return true;
  }
});
  1. 内容脚本中发送消息请求数据:
chrome.runtime.sendMessage({action: 'getSessionData'}, (response) => {
  console.log('从后台获取的session数据:', response);
});

方法2:改用chrome.storage.local(业务允许的情况下)

如果你的数据不需要严格的会话隔离(比如关闭浏览器后可保留),可以替换为chrome.storage.local,内容脚本在声明storage权限后可直接访问:

后台存储数据:

chrome.storage.local.set({"data": data});

内容脚本读取数据:

chrome.storage.local.get(["data"], function(data){
  console.log(data);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:56:06