Ошибка: неправильные типы аргументов для хранилища.StoreArea.set

Мне нужно хранить массив объектов, используя storage.local, Когда я пытаюсь позвонить set чтобы вставить данные в хранилище, я получаю следующую ошибку:

Error: Incorrect argument types for storage.StorageArea.set.

Вот манифест:

{
  "manifest_version": 2,
  "name": "test",
  "version": "1.0",

  "icons": {
    "64": "icons/myicon.png"
  },

  "browser_action": {
    "default_icon": "icons/myicon.png",
    "default_title": "test",
    "default_popup": "popup/input.html"
  },

 "background": {
    "scripts": ["test.js"]
  },
  "permissions": [
    "webRequest",
    "storage"
  ]

}

Вот сценарий:

browser.storage.local.set([{name:"Mog", eats:"mice"},{name:"Kraken", eats:"people"}]);
console.log(browser.storage.local.get());

Недостаточно ресурсов для веб-расширения. Так что, извините за примитивный вопрос.

1 ответ

Решение

storage.local.set ожидает простой объект, а не массив. Хотя Array - это Object, в его прототипе есть нечто большее, чем обычный Object. Это на самом деле хорошо для применения, так как разрешение хранить пустой массив может привести к путанице. Например, что происходит, когда вы сохраняете новый массив, который короче? Следует ли удалить все записи, отсутствующие во вновь сохраненном массиве, или оставить их и вернуть их при получении данных?

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

browser.storage.local.set({
    myArray: [{
        name: "Mog",
        eats: "mice"
    }, {
        name: "Kraken",
        eats: "people"
    }]
});
Другие вопросы по тегам