LocalStorage возвращает null в другой вкладке в хроме

Это моя проблема:

Я обновляю localStorage в popup.js на новой вкладке. Я обращаюсь к тому же localStorage (тот же ключ) в background.js.

Теперь это возвращает null в каждой вкладке, кроме вкладки chrome://extensions (при загрузке расширений.)

Я думал LocalStorage был настойчивым во всех вкладках.

код:

popup.js:

$(document).ready(function (){

    alert(localStorage.getItem('filters'));
    var oldFilters = localStorage.getItem('filters');
    //All the filters show up on the popup.html page.
    document.getElementById('td1').innerHTML = oldFilters;

    var dat = oldFilters + "," + newArray[j]
    localStorage.setItem('filters',String(dat));
}

background.js:

$(window).ready(function() {
  // Handler for .ready() called.

 var filters = localStorage.getItem('filters');

   alert("background + "+ filters);
    //This shows all the filters in the chrome:extensions page but always pops up "background + null" in every new tab load. 

//changeImage(filters);

});

Ответ 1

Background и Действие браузера (В вашем случае) Страницы живут в изолированных мирах, их локальные данные хранилища не доступны друг другу, если вы хотите, чтобы этот вид доступа использовался chrome.storage для ваших нужд хранения.

У него мало преимуществ

  • Сценарии расширения контента могут напрямую обращаться к пользовательским данным без необходимости создания справочной страницы.
  • Настройки пользовательских расширений могут сохраняться даже при использовании раздельного поведения инкогнито.
  • Пользовательские данные могут быть сохранены как объекты (localStorage API хранит данные в строках).

Используемые методы

Демонстрация

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).