neluzhin
@neluzhin

Как забить функции Chrome Extension API в переменные?

Здравствуйте.

У меня есть расширение для Google Chrome. Есть задача перегнать это расширение на браузеры, поддерживающие Chrome Extension API (типа Яндекс.Браузера, Opera и т.п.). Только как известно, не все браузеры в полной мере поддерживают все возможности API. По меньшей мере Opera не поддерживает chrome.storage.sync и некоторые параметры в chrome.notifications.create. Чтобы не делать для каждого браузера индивидуальное расширение, было решено обернуть функции со слабой поддержкой в собственную переменную. Например, чтобы вместо chrome.storage.sync.get(keys, callback) вызывать cbf.storage.sync.get(keys, callback). Реализуется это примерно так:

var cbf = {};
cbf.storage = {};
cbf.storage.sync = {};
// browser_name задается чуть раньше
cbf.storage.sync.get = browser_name == "Chrome" ? chrome.storage.sync.get : chrome.storage.local.get;

Только вот проблема в том, что это почему-то не работает. При вызове функции в консоль отбрасывается ошибка:

cbf.storage.sync.get(function(sync_storage) { /* ... */ });

Текст ошибки:

extensions::StorageArea:26 Uncaught TypeError: Cannot read property 'get' of undefined

Похоже, что я что-то не понимаю. Подскажите, пожалуйста, как правильно.

TUCF8yt.png
  • Вопрос задан
  • 537 просмотров
Решения вопроса 1
dmitry_pavlov
@dmitry_pavlov
World-class .NET freelance contractor (remotely)
А то, что вы туда складываете - chrome.storage.sync.get или chrome.storage.local.get - оно определено? Что там, если вывести в консоль?

console.log(chrome.storage.local.get);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы