与 Google Chrome 的存储 API 交互

Interacting with Google Chrome's storage API

我是 JavaScript 的新手,也是 Chrome 扩展编程的新手,我在与可以在浏览器中本地存储数据的存储 API 交互时遇到了一些问题.在仔细阅读 chrome.storage 文档后,我仍然无法将任何内容加载到存储中。到目前为止,我的代码分为两部分,第一部分是定义名称和制表符的代码。它调用第二个应该与存储交互的函数:

  var groupmaker = function() {
    var $tabs = document.querySelector("tabs-");
    var $input = document.querySelector("input");
    chrome.tabs.query({windowId: chrome.windows.WINDOW_ID_CURRENT}, function(tabs) {
      setData($input.value, tabs)
      $tabs.innerHTML = `<h1>${$input.value}</h1>`;
      tabs.forEach(tab => {
        $tabs.innerHTML += `
          <a href='${tab.url}'>
            <p>${tab.title}</p>
          </a>
        `;
      });
      $tabs.querySelector('h1').addEventListener('click', toggleHidden);
    });
  };

var setData = function(name, tabs){
  chrome.storage.local.set({ name: JSON.stringify(tabs) }, function(){
    // Now data has been saved get ALL data (by passing in null)
    chrome.storage.local.get(null, function(items){
      console.log(items)
    });
  });
}

有人看到这段代码中的错误吗?除了 "storage" 权限之外,是否需要在 manifest.json 文件中设置任何特殊内容才能使扩展正常工作?任何帮助将不胜感激。

终于明白你的意思了

当您调用以下行时,我猜您希望 namevalue 作为键,但是,它实际上使用 "name"作为键,这意味着你的存储中只有一个项目,它的键是"name"

chrome.storage.local.set({ name: JSON.stringify(tabs) })

你要的是用[name],这个叫Computed property names

chrome.storage.local.set({ [name]: JSON.stringify(tabs) })