能否通过Chrome扩展访问指定网站的localStorage获取存储数据?
结论
可以实现,Chrome扩展有权限访问指定匹配站点的localStorage数据,你是站点的开发者,完全可以通过配置扩展权限完成该需求。
具体实现方案
方案1:内容脚本常驻读取(适合需要自动检测登录态的场景)
内容脚本是Chrome扩展注入到目标页面中运行的脚本,和目标页面共享同源上下文,可直接操作页面的localStorage:
- 首先在扩展的
manifest.json(推荐用现在Chrome官方主推的V3版本)中配置站点权限和注入规则:
{ "manifest_version": 3, "name": "后台自动登录扩展", "version": "1.0", "content_scripts": [ { "matches": ["https://你的网站域名/*"], // 替换为你自己的站点地址 "js": ["content.js"] } ], "host_permissions": ["https://你的网站域名/*"] }
- 然后在
content.js中直接读取localStorage即可:
// 读取JWT const jwt = localStorage.getItem('你站点存储JWT的键名') // 如果需要把JWT传给扩展后台,用Chrome消息API传递 if(jwt) { chrome.runtime.sendMessage({type: 'GET_JWT_SUCCESS', data: jwt}) } // 如果是要写入JWT实现自动登录,直接赋值即可 // localStorage.setItem('你站点存储JWT的键名', '扩展里存储的JWT值')
方案2:主动注入脚本读取(适合按需触发读取的场景)
如果不需要每次页面加载都注入脚本,你可以在需要读取的时候主动调用chrome.scriptingAPI注入一次性脚本读取数据:
- 首先在
manifest.json中申请对应的权限:
{ "manifest_version": 3, "name": "后台自动登录扩展", "version": "1.0", "permissions": ["scripting"], "host_permissions": ["https://你的网站域名/*"] }
- 在扩展的popup或者后台脚本中调用API读取:
async function getJWTFromSite() { const [tab] = await chrome.tabs.query({active: true, url: "https://你的网站域名/*"}) const [result] = await chrome.scripting.executeScript({ target: {tabId: tab.id}, func: () => localStorage.getItem('你站点存储JWT的键名') }) const jwt = result.result // 后续处理JWT的逻辑 }
注意事项
扩展只能访问你在
host_permissions中声明过的站点的存储,不能随意读取其他未授权站点的localStorage,符合浏览器的安全规则。你如果需要实现自动登录,只需要把扩展中存储的JWT通过上述两种方式写入到站点的localStorage中,刷新页面后站点就能识别登录态,无需用户手动登录。
内容的提问来源于stack exchange,提问作者mangomango
相关产品推荐
相关产品推荐

