2016-03-18 5 views
0

Я пытаюсь разработать Firefox Add-на расширение SDK, который сохраняет данные с использованием библиотеки localforage, но я получаю следующее сообщение об ошибке:Как разработать Firefox Add-на расширение SDK с помощью localforage

Full message: ReferenceError: self is not defined 
Full stack: [email protected]://browser-journey/node_modules/localforage/dist/localforage.js:259:9 
@resource://browser-journey/node_modules/localforage/dist/localforage.js:689:1 
@resource://browser-journey/node_modules/localforage/dist/localforage.js:7:2 
@resource://browser-journey/index.js:6:19 
[email protected]://gre/modules/commonjs/sdk/addon/runner.js:147:19 

I установленный localforage с использованием npm.

Я думаю, проблема может быть из-за this issue в localforage. Есть ли обходной путь?

ответ

0

This запрос на тягу просто слился с библиотекой и, похоже, устранил проблему.

+0

Это не решило проблему использования 'localforage' внутри аддона. 'localforage' проверяет наличие доступных систем хранения данных, проверяя глобальные переменные типа' typeof indexedDB! == 'undefined'', но 'indexedDB' недоступен в среде аддона. Должно потребоваться явно bu 'var {indexedDB} = require ('sdk/indexed-db');'. – DUzun

0

Авторы localforage не намерены поддерживать Firefox Addons, но это не значит, что это невозможно. Вот смежный вопрос: https://github.com/mozilla/localForage/issues/584

Вы можете написать собственный драйвер для localforage: https://github.com/mozilla/localForage/pull/282

Или добавьте этот код в верхней части файла dist/localforage.min.js перед включением его в аддоне:

/** 
* Detect Firefox SDK Addon environment and prepare some globals 
* 
* @author Dumitru Uzun (DUzun.Me) 
*/ 
(function (window, undefined) { 
    if (typeof exports != "object" || typeof module == "undefined") return; 

    if (window && window.Array === Array) try { 
     window.window = window; 

     // Timers 
     if (typeof setTimeout == 'undefined') { 
      expo(
       require("sdk/timers") 
       , [ 
        'setTimeout' , 'clearTimeout', 
        'setImmediate', 'clearImmediate' 
       ] 
      ); 
     } 

     // Blob, FileReader 
     var Cu = require("chrome").Cu; 
     var Services = Cu['import']("resource://gre/modules/Services.jsm", {}); 
     expo(
      Services 
      , ['Blob', 'FileReader'] 
     ); 
     expo(
      Services.appShell && Services.appShell.hiddenDOMWindow 
      , ['Blob', 'FileReader'] 
     ); 

     // IndexedDB 
     expo(require('sdk/indexed-db')); 

    } catch(err) { 
     console.log('error', err); 
    } 

    function expo(ctx, props) { 
     if (!ctx) return; 
     if (!props) props = Object.keys(ctx); 
     for(var i=props.length,p; i--;) { 
      p = props[i]; 
      if (ctx[p] != undefined && !(p in window)) { 
       window[p] = ctx[p]; 
      } 
     } 
     return ctx; 
    } 
}(this)); 

 Смежные вопросы

  • Нет связанных вопросов^_^