Здравствуйте.
У меня есть расширение для 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
Похоже, что я что-то не понимаю. Подскажите, пожалуйста, как правильно.