У меня есть страница параметров, где пользователь может определить определенные параметры и сохраняет их в localStorage: options.html
Теперь у меня также есть скрипт контента, который должен получить параметры, которые были определены на options.html
странице, но когда я пытаюсь получить доступ к localStorage из скрипта контента, он не возвращает значение со страницы настроек.
Как сделать так, чтобы мой скрипт содержимого получал значения из localStorage, страницы параметров или даже фоновой страницы?
Ответы:
Обновление 2016:
Google Chrome выпустил API хранилища: http://developer.chrome.com/extensions/storage.html
Его довольно легко использовать, как и другие API Chrome, и вы можете использовать его из любого контекста страницы в Chrome.
Чтобы использовать его, убедитесь, что вы определили его в манифесте:
Существуют методы для «удаления», «очистки», «getBytesInUse» и прослушивателя событий для прослушивания измененного хранилища «onChanged»
Использование родного localStorage ( старый ответ от 2011 года )
Сценарии содержимого выполняются в контексте веб-страниц, а не страниц расширения. Поэтому, если вы обращаетесь к localStorage из вашего содержимого, это будет хранилище с этой веб-страницы, а не хранилище страниц расширения.
Теперь, чтобы ваш контент-скрипт мог читать ваше хранилище расширений (где вы установили их со страницы настроек), вам нужно использовать передачу сообщений расширений .
Первое, что вы должны сделать - это попросить ваш контент-скрипт отправить запрос вашему расширению для получения некоторых данных, и эти данные могут быть вашим расширением localStorage:
contentscript.js
background.js
Вы можете использовать API для этого, чтобы получить общие данные localStorage для вашего скрипта контента или, возможно, получить весь массив localStorage.
Я надеюсь, что это помогло решить вашу проблему.
Быть модным и родовым ...
contentscript.js
background.js
источник
sendResponse({data: localStorage});
?localStorage
прямо со страницы параметров или использоватьchrome.extension.getBackgroundPage
со страницы параметров.Иногда может быть лучше использовать chrome.storage API. Это лучше, чем localStorage, потому что вы можете:
Вот простой код, демонстрирующий использование chrome.storage. Сценарий содержимого получает URL посещенной страницы и отметку времени и сохраняет ее, popup.js получает ее из области хранения.
content_script.js
popup.js
«Изменения» - это объект, который содержит старое и новое значение для данного ключа. Аргумент «AreaName» относится к имени области хранения: «локальный», «синхронный» или «управляемый».
Не забудьте объявить разрешение на хранение в manifest.json.
manifest.json
источник
onChanged
Событие уже предоставляет данные вchanges
объекте. Кроме того, обратите особое внимание наnamespace
частьonChanged
мероприятия. Если вы что-то храните с помощьюchrome.storage.local.set
, тоonChanged
событие инициируется, но чтение с использованиемchrome.storage.sync.get
имеет мало смысла.changes.visitedPages
будет неопределенным, еслиvisitedPages
не был изменен. Заверните строку,if (changes.visitedPages) { ... }
чтобы решить эту проблему.Другим вариантом будет использование API-интерфейса chromestorage. Это позволяет хранить пользовательские данные с возможностью синхронизации между сеансами.
Недостатком является то, что он асинхронный.
https://developer.chrome.com/extensions/storage.html
источник