Расширение Chrome Local Storage: Background.html не имеет доступа к localalstorage? - PullRequest
2 голосов
/ 03 мая 2011

Запись и чтение из LocalStorage работает нормально из моего всплывающего окна и вкладки. Однако, когда я пытаюсь добавить значение с моей фоновой страницы, оно, похоже, не пишет вообще. Я просматриваю локальное хранилище в Chrome Developer Tools, обновляя и ища значение, которое нужно показать.

В следующем примере код background.html 'lastId' правильно отображается в предупреждении при добавлении новой закладки. Однако значение не сохраняется. Кроме того, запрос на известное значение, похоже, завершается сбоем без отображения предупреждений. (Результаты одинаковы при использовании обоих синтаксисов, показанных ниже.)

<html>
<script>
// Grab the id of newly created bookmarks
chrome.bookmarks.onCreated.addListener(function(id) {
    var lastId = id;
    alert(lastId);
    localStorage['lastId'] = lastId;
            var testvalue = localStorage['309'];
    alert(testvalue);
            localStorage.setItem('lastId', lastId);
    var testvalue2 = localStorage.getItem('309');
    alert(testvalue2);
});
</script>
</html>

Я продолжаю думать, что мне просто не хватает какой-то небольшой проблемы с синтаксисом или чего-то еще, но я ничего не вижу. Если мое декларация манифеста была неправильной, я не думаю, что предупреждение будет работать для идентификатора. Тупик ...

ОБНОВЛЕНИЕ: Оказывается, вам необходимо принудительно перезагрузить расширение при обновлении фоновых страниц, поскольку они сохраняются в памяти браузера при открытии. Вот почему мой сохраненный код не работает. Это не было обновлено, и я должным образом смущен.

1 Ответ

4 голосов
/ 03 мая 2011

Хм, я могу подумать о нескольких вещах.

Вы говорите, что это работает во вкладке и во всплывающем окне.Это очень странно, потому что это не должно (если под вкладкой подразумевается контентный скрипт).Сценарии содержимого могут получить доступ только к localStorage, который принадлежит внедренному сайту.Всплывающее окно, фон, страницы параметров и любая другая страница из папки расширения могут получить доступ только к собственному локальному хранилищу расширения.Эти два локальных хранилища и полностью разделены.Так, может быть, вы проверяете неправильное localStorage?

Чтобы увидеть собственный localStorage расширения, вам нужно проверить фон или всплывающую страницу и проверить вкладку ресурсов в инспекторе.Чтобы проверить скрипт сайта или контента localStorage, вам нужно открыть на странице обычный инспектор.

Второй момент - это то, что ваше назначение localStorage может быть не тем, что вы ожидаете.

var lastId = 5;
localStorage['lastId'] = lastId;

вы получите значение 5, присвоенное lastId свойству.Итак, чтобы прочитать записанное значение, вам нужно выполнить:

alert(localStorage['lastId']); //not localStorage['5']

Если вы хотите хранить массивы, вам нужно будет сериализовать / десериализовать их через JSON, так как localStorage может хранить только строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...