Ответ 1
Background и Действие браузера (В вашем случае) Страницы живут в изолированных мирах, их локальные данные хранилища не доступны друг другу, если вы хотите, чтобы этот вид доступа использовался chrome.storage для ваших нужд хранения.
У него мало преимуществ
- Сценарии расширения контента могут напрямую обращаться к пользовательским данным без необходимости создания справочной страницы.
- Настройки пользовательских расширений могут сохраняться даже при использовании раздельного поведения инкогнито.
- Пользовательские данные могут быть сохранены как объекты (localStorage API хранит данные в строках).
Используемые методы
-
chrome.storage.local.get
-
chrome.storage.local.set
(используйтеsync
вместоlocal
, если данные необходимо синхронизировать с Google Sync)
Демонстрация
manifest.json
Убедитесь, что для доступа к API хранения доступны все разрешения.
{
"name":"Local Storage Demo",
"description":"This is a small use case for using local storage",
"version":"1",
"manifest_version":2,
"background":{
"scripts":["background.js"]
},
"browser_action":{
"default_popup":"popup.html",
"default_icon":"logo.png"
},
"permissions":["storage"]
}
popup.html
Тривиальная страница html popup, которая ссылается на popup.js, чтобы превзойти CSP.
<!doctype html>
<html>
<head>
<script src="popup.js"></script>
</head>
<body>
</body>
</html>
background.js
Этот скрипт устанавливает содержимое для хранения хрома
//Set some content from background page
chrome.storage.local.set({"identifier":"Some awesome Content"},function (){
console.log("Storage Succesful");
});
//get all contents of chrome storage
chrome.storage.local.get(null,function (obj){
console.log(JSON.stringify(obj));
});
popup.js
Этот script извлекает и устанавливает содержимое из хранилища \to chrome
document.addEventListener("DOMContentLoaded",function (){
//Fetch all contents
chrome.storage.local.get(null,function (obj){
console.log(JSON.stringify(obj));
});
//Set some content from browser action
chrome.storage.local.set({"anotherIdentifier":"Another awesome Content"},function (){
console.log("Storage Succesful");
});
});
Если вы посмотрите на выходные данные этих js-страниц, будет достигнута связь с хранилищем (Background → popup и popup → background).