2016-07-15 5 views
1

Я создал пользовательское меню, которое добавлено на страницу с помощью Chrome Content Content Script. Расширение отлично работает, и меню отображается так, как я хотел.Хромированный контентный скрипт для доступа к chrome.storage

Я хочу пойти немного дальше и добавить страницу опций, с вкл/выкл переключатель, который будет определять вар menuToggle к 1 или 0, и что вар будет присоединен к условию IF:

IF menuToggle == 1 // Do something 
ELSE // console.log("var is 0, menu not loaded"); 

Я смог выполнить эту работу в среде расширения с помощью "localstorage.menuToggle = 1;", но я понимаю, что это будет работать только для экземпляра внутри моего расширения и что Content Script не сможет получить доступ к этому var.

Я прошел через official docs для API chrome.storage, но, честно говоря, я не очень понял, так как я на ранней стадии программирования.

Из того, что я увидел, что я должен использовать chrome.storage.sync.set для этого, но я не совсем понимаю, как установить это правильно и или как получить данные, когда внутри скрипта содержимого. Я пытался что-то вроде сильфона, но это не сработало:

chrome.storage.sync.set({'menuToggle': '1'}, function(){}); 

Вопрос здесь: Мне нужно определить функцию после sync.set ли? Можно ли просто хранить данные без каких-либо функций после него?

Беллоу код, который я использовал с LocalStorage:

var varMenuToggleDefault = 1; 
localStorage.varMenuToggle = 1; 

$("input:checkbox[name=onoffswitch]").change(function() { 
    if ($(this).is(':checked')) { 
    localStorage.varMenuToggle = varMenuToggleDefault; 
    console.log('Switch is ON'); 
    console.log("Var is: " + localStorage.varMenuToggle); 
    } else { 
    localStorage.varMenuToggle = "0"; 
    console.log('Switch is OFF'); 
    console.log("Var is: " + localStorage.varMenuToggle); 
    } 

if (localStorage.varMenuToggle == 1) { 
// Load the menu 
} else { 
// console.log("varMenuToggle is 0. Menu NOT loaded"); 
}; 

Что я делаю неправильно/не хватает?

ответ

2

chrome.storage функции асинхронны. Функция после скобок называется функцией обратного вызова и срабатывает, когда операция завершена. Вам не нужно иметь функцию обратного вызова.

Получение данных обратно немного отличается. Вы можете получить доступ к вашим данным таким образом:

chrome.storage.sync.get("menuToggle", function(data) { 
    var menuToggle = data.menuToggle; 
} 

Поскольку функции являются асинхронными, если вы хотите получить данные обратно, вы необходимо иметь функцию обратного вызова. Функция обратного вызова получает объект, который имеет свойство menuToggle, которое содержит заданное вами значение.

+0

Спасибо вам за быстрый и простой ответ. Из того, что я понимаю, поскольку мне сначала нужно запросить ** sync.get ** для получения значения, мне нужно будет вставить условие if в сценарий содержимого внутри обратного вызова после того, как var будет извлечен, это правильно ? Что-то вроде: 'chrome.storage.sync.get ("menuToggle", функция (данные) { вар menuToggle = data.menuToggle; если (menuToggle == 1) {сделать что-то} }' – SoMeGoD

+0

Я боролся битное тестирование этого, но с вашей помощью мне удается установить и получить значение для добавления или не меню. Я не знаю, если это лучший способ, но я использовал страницу событий, чтобы установить var в первый раз после рассрочки. – SoMeGoD

Смежные вопросы