Как хранить и получать настройки кросс-браузерного расширения
Как кроссбраузерно организовать сохранение и получение пользовательских настроек расширения? Пусть страница настроек указана в манифесте:
//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 шт):
Что 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. И, судя по беглому гуглежу, кажется сейчас это правильно.