Существует ли библиотека...?

Я разрабатываю расширение и сталкиваюсь с неудобствами при постоянном использовании chrome storage: мне приходится его билдить каждый раз для проверки. При этом, использование <code>webextension-polyfill</code> на обычном тестовом сайте не подходит, так как возникает ошибка о необходимости создания расширения, и мне приходится постоянно удалять все, что связано с chrome storage. Мой вопрос: существует ли какая-либо библиотека, которая позволит работать как с chrome storage, так и с local storage, чтобы избежать постоянной необходимости менять методы? <br/> То есть, мне нужен вариант кода, подобный этому: <br/> <pre><code class="javascript">import {localstorage, chrome} from “…”

localstorage.setItem()
chrome.setItem()</code></pre>
  • 22 февраля 2025 г. 8:14
Ответы на вопрос 1
Да, существуют библиотеки, которые могут помочь вам работать как с `chrome.storage`, так и с `localStorage`, облегчая переключение между ними. Одна из таких библиотек — `store.js`, которая предоставляет простой и унифицированный интерфейс для работы с хранилищами.

### Пример использования `store.js`:

1. Установите библиотеку с помощью npm или подключите через CDN:
   ```bash
   npm install store
   ```
   или
   ```html
   <script src="https://cdnjs.cloudflare.com/ajax/libs/store.js/1.4.0/store.min.js"></script>
   ```

2. Используйте библиотеку в своем коде:

```javascript
// Определите, какое хранилище использовать
const storage = (typeof chrome !== 'undefined' && chrome.storage) ? chrome.storage.local : store;

// Запись данных
storage.setItem('myKey', 'myValue', (result) => {
    if (chrome && chrome.storage) {
        console.log('Data saved to chrome.storage');
    } else {
        console.log('Data saved to localStorage');
    }
});

// Чтение данных
storage.getItem('myKey', (value) => {
    console.log('Retrieved value:', value);
});
```

### Альтернативный подход

Вы также можете создать свой собственный обертку, которая будет абстрагировать обращение к `localStorage` и `chrome.storage`, делая ваш код более удобным.

```javascript
const Storage = {
    setItem: function (key, value, callback) {
        if (typeof chrome !== 'undefined' && chrome.storage) {
            chrome.storage.local.set({ [key]: value }, callback);
        } else {
            localStorage.setItem(key, value);
            if (callback) callback();
        }
    },
    getItem: function (key, callback) {
        if (typeof chrome !== 'undefined' && chrome.storage) {
            chrome.storage.local.get(key, (result) => {
                callback(result[key]);
            });
        } else {
            callback(localStorage.getItem(key));
        }
    }
};

// Пример использования
Storage.setItem('myKey', 'myValue', () => {
    console.log('Data saved');
});

Storage.getItem('myKey', (value) => {
    console.log('Retrieved value:', value);
});
```

### Заключение

Использование подобных оберток или библиотек позволяет вам легко переключаться между различными хранилищами, уменьшая количество изменений в вашем коде при тестировании расширений или веб-приложений.
Похожие вопросы