与Google Chrome的存储API

时间:2016-12-08 07:50:13

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

我是一个相对较新的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)
    });
  });
}

有没有人在此代码中看到错误?除了“存储”权限之外,在manifest.json文件中是否需要设置任何特殊的扩展才能工作?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

最后,我理解你想要的东西。

当您拨打以下行时,我猜您希望name成为关键,但实际上它使用 "name" 作为键,这意味着您的存储空间中只有一个项目,其关键字为"name"

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

您想要使用[name],这称为Computed property names

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