【问题标题】:Can I get access to localStorage of site from chrome extension?我可以从 chrome 扩展程序访问站点的 localStorage 吗?
【发布时间】:2017-03-27 15:45:58
【问题描述】:

我的 chrome 扩展有两种状态: 1. 一些站点在localStorage(另一个域)中有认证数据,所以我必须显示主窗口。 2. 没有验证数据,所以我必须显示带有登录名和密码表单的窗口。

为了定义是否提供了auth数据,我想检查一下他的localStorage,但看起来不可能。

但是,chrome.storage.local.getchrome.storage.local.set 非常适合扩展的 localStorage。

或者有没有办法做到这一点 - 访问另一个站点的 localStorage ?

【问题讨论】:

标签: google-chrome google-chrome-extension local-storage


【解决方案1】:

是的,您可以在页面上执行脚本来访问本地存储。有几种不同的方法可以做到这一点,包括内容脚本或注入脚本。

我使用chrome-extension-async 来获得async/await 支持。

例如popup.js

document.addEventListener('DOMContentLoaded', async () => {
    try {
        const key = "foobar"

        // Get the current tab
        const tabs = await chrome.tabs.query({ active: true, currentWindow: true });
        const tab = tabs[0]; 

        // Execute script in the current tab
        const fromPageLocalStore = await chrome.tabs.executeScript(tab.id, { code: `localStorage['${key}']` });

        // Store the result  
        await chrome.storage.local.set({[key]:fromPageLocalStore[0]});
    } 
    catch(err) {
        // Log exceptions
    }
});

【讨论】:

  • 据我了解,我无法访问 localStorage 或关闭标签的 cookie 吗?
  • @EugeneShmorgun 您依赖于在页面上下文中执行代码,您无法在该上下文之外对该站点运行代码。您将能够创建一个新选项卡,然后在其中运行代码。
  • 我只是想了解规则:如果我已在我的网站上授权(这意味着我在具有特定域的页面中有 cookie 和 localStorage),我可以通过 content_script 访问这些数据吗?
  • @EugeneShmorgun content scriptchrome.tabs.executeScript 将起作用,只要您在选项卡中打开站点并在清单中具有适当的权限(activeTab 仅用于当前选项卡或 @ 987654331@ 访问任何打开的标签并创建新标签)。
  • @EugeneShmorgun 即使没有打开选项卡,您也能够读取域的本地存储吗?基思的回答当然是有道理的,但只是在一定程度上。浏览器中的本地存储被创建为存在于选项卡上下文之外,但存在于域上下文中,并且在关闭选项卡时仍然存在。这就是它的目的。这就是为什么能够在不打开该域的选项卡的情况下读取域的本地存储(您在清单中具有权限)非常有意义的原因。
猜你喜欢
  • 2013-06-19
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多