Как хранить и получать настройки кросс-браузерного расширения

Как кроссбраузерно организовать сохранение и получение пользовательских настроек расширения? Пусть страница настроек указана в манифесте:

//manifest.json
...
"options_page": "options.html"

В данной странице есть поле Имя:

    //options.html
    <head>
    <meta charset="utf-8">
    <title>Настройки расширения</title>
    <script src="options.js"></script>
    </head>
    <span>Имя пользователя:</span>
    <input type="text" id="name">

Если значение поля записывать в localStorage, то область доступности ограничивается только страницей options.html. Расширение же добавляет код на страницу сайта, откуда нужно получить сохраненные данные. К сожалению, большинство хороших статей в сети описывают частный случай с использованием специфичных методов chrome. А как получить настройки расширения вне зависимости от браузера?


Ответы (1 шт):

Автор решения: stylok

Что Chrome, что Firefox имеют аналогичныне хранилища. И с тех пор как Mozilla снизошла до поддержки большнинства функционала 3 манифеста подавляющее часть всего того, что вы читаете о одном браузере применимо ко второму.

И, то, где нужно быть внимательным "префикс" браузера:

// Firefox
browser.storage.local.set({ff: true})
browser.storage.local.get(console.log);

// Chrome
chrome.storage.local.set({ch: true})
chrome.storage.local.get(console.log);

Естественно, что его поддержка должна быть подключена в манифесте:

"permissions": [
    "storage"
],

Читайте любой из мануалов и применяйте, на забывая о различающихся "префиксах".

Chrome — storage, Firefox — storage.

Как максимально закроссбраузерить? Пожалуй нет ничего проще чем назначить одинаковое имя для хранилища через условие как-то так:

const storage = (условие**) ? chrome.storage : browser.storage;
// и дальше по коду обрашаться так
storage.set({my: {test: true}});
storage.log(console.log);

Думаю, что с условием** проверки вы уж как-нибудь сами разберётесь.)

UPD: Перед сном пришло в голову протестировать в FF одну фичу на доступность... и тут я узнал странное. Дело в том, что пока Mozilla тормозила с манифестом я перестал что-либо делать для него в ожидании, а потом всё руки не доходили, пока вы не сподвигли. Так вот, реально странное, то, что в Firefox вполне себе рабочим оказался и код — chrome.storage. И, судя по беглому гуглежу, кажется сейчас это правильно.

→ Ссылка