2016-12-08 16 views
-1

Я относительно новичок в JavaScript и совершенно новый для программирования Chrome Extension, и у меня возникли проблемы с взаимодействием с API хранения, который может локально хранить данные в вашем браузере. После тщательного изучения документации chrome.storage я до сих пор не смог загрузить что-либо в хранилище. Вот код, который у меня есть до сих пор в двух частях, первый - это мой код, который определяет имя и вкладки. Он вызывает вторую функцию, которая, как предполагается, будет взаимодействовать с хранения:Взаимодействие с API хранения Google Chrome

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, чтобы расширение работало помимо разрешения «хранения»? Любая помощь будет принята с благодарностью.

+0

Пожалуйста, подтвердите, что «имя» не является нулевым, и вы просматриваете консоль справочной страницы. –

+0

имя нет null. Что вы понимаете, наблюдая за фоновым пулом страниц? На самом деле я не работаю с фоновой страницей. Это проблема? –

+0

Вы должны смотреть консоль с того места, где вы называете 'console.log'. Например, если вы вызываете его на фоновой странице, вы должны открыть фоновый рисунок и посмотреть, есть ли какие-либо выходы с его консоли. Что касается отладки фоновой страницы: http://stackoverflow.com/documentation/google-chrome-extension/5938/developer-tool-integration/20829/debugging-the-background-page-script#t=201612080838201839112 –

ответ

0

Наконец-то я понимаю, чего вы хотите.

При вызове следующей строки, я предполагаю, что вы хотите получить значение из name быть ключ, однако, на самом деле использует "name" в качестве ключа, что означает, что будет только один пункт в вашем хранилище , чей ключ "name".

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

Что вы хотите использовать [name], это называется Computed property names.

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

Извините за то, что так непонятно! Тем не менее, как я могу проверить, чтобы сохранить данные в моей базе данных? Когда я проверил, ничего не заполняет локальное хранилище или хранилище сеансов на вкладке приложения для проверки всплывающего окна. –

+0

Эй, 'chrome.storage' отличается от хранилища в Интернете (локальное хранилище или хранилище сеансов). Если вы хотите просмотреть то, что находится в 'chrome.storage', единственный способ - вызвать метод' get' и вывести их; однако, если вы действительно хотите использовать веб-хранилище, вам нужно напрямую их использовать, а не 'chrome.storage' –

+0

отлично! В этом есть смысл. Один последний вопрос ... после проверки, он говорит, что QUOTA_BYTES_PER_ITEM превышены, что, я считаю, означает, что строка вкладок слишком длинная. Любые идеи, как я могу обойти это? –