【问题标题】:Do Chrome extensions have access to local storage?Chrome 扩展程序是否可以访问本地存储?
【发布时间】:2024-01-30 07:05:01
【问题描述】:

是否可以在 chrome 扩展的上下文中以浏览器重启后可访问的方式存储数据?

【问题讨论】:

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


    【解决方案1】:

    比这更简单:

    阅读:

        var myStoredValue = localStorage["TheKeyToMyStoredValue"];
    

    写作:

        localStorage["TheKeyToMyStoredValue"] = myNewValueToStore;
    

    摆脱:

        delete localStorage["TheKeyToMyStoredValue"];
    

    【讨论】:

    • 你先生是99级的德鲁伊和圣人。
    • 很好的答案。请注意,这不适用于内容脚本。我很困惑,直到我找到this
    【解决方案2】:

    是的,是的。详细了解如何执行此操作可能会超出合理的 * 答案的长度,因此我将向您推荐 Rajdeep Dua 的 this very extensive tutorial

    相关代码如下所示:

    // Store item in local storage:
    function setItem(key, value) {
      try {
        log("Storing [" + key + ":" + value + "]");
        window.localStorage.removeItem(key);      // <-- Local storage!
        window.localStorage.setItem(key, value);  // <-- Local storage!
      } catch(e) {
        log("Error inside setItem");
        log(e);
      }
      log("Return from setItem" + key + ":" +  value);
    }
    
    // Gets item from local storage with specified key.
    function getItem(key) {
      var value;
      log('Retrieving key [' + key + ']');
      try {
        value = window.localStorage.getItem(key);  // <-- Local storage!
      }catch(e) {
        log("Error inside getItem() for key:" + key);
      log(e);
      value = "null";
      }
      log("Returning value: " + value);
      return value;
    }
    
    // Clears all key/value pairs in local storage.
    function clearStrg() {
      log('about to clear local storage');
      window.localStorage.clear(); // <-- Local storage!
      log('cleared');
    }
    
    function log(txt) {
      if(logging) {
        console.log(txt);
      }
    }
    

    【讨论】:

    【解决方案3】:

    现在最好使用chrome.storage chrome.storage 是异步的,这使其速度更快,并且 localStorage 限制为 5MB。

    【讨论】:

    • “这使它更快” [需要引用]
    • 正如 chrome 开发者 here 指定的那样,批量非阻塞读写操作比阻塞和串行 localStorage API 更快。
    • 感谢您的链接!
    【解决方案4】:

    这里已经有一些很好的答案,但请注意,如果您决定在扩展程序中使用内容脚本,则该内容脚本将无法访问 localStorage。因此chrome.storage 是一个不错的选择。

    【讨论】:

    • 技术上它可以访问localStorage——它将是运行内容脚本的域的本地存储(与页面本身共享)。跨度>
    【解决方案5】:

    当前的 chrome 版本有本地存储。

    我自己用过。您可以使用modernizr 来检测浏览器是否支持它。 我已经为客户端编写了一个解决方案,如果不存在本地存储,我会回退到 cookie,但这对于扩展来说应该不是问题。

    【讨论】:

      【解决方案6】:

      Chrome 还支持 HTML5 Web Database 规范。这为您提供了一个本地 SQL 数据库,因此您可以做比简单地将名称/值对存储在本地存储中更复杂的事情。

      【讨论】: