2016-02-20 21 views
6

İndeksliDB'ye veri kaydetmek için bazı içerik komut dosyalarına sahip Firefox eklentisi geliştiriyorum. Aynı kod, Chrome uzantısında mükemmel şekilde çalışıyor, ancak Firefox eklentisinde değil. Firefox'ta her şey, verilerin veritabanına yazılması gereken yere kadar iyi çalışıyor.Firefox eklentisinden gelen içerik dosyası dizini, IndexedDB'ye yazmıyor IndexedDB

index.js

var data = require("sdk/self").data; 
var pageMod = require("sdk/page-mod"); 
var { indexedDB } = require('sdk/indexed-db'); 

var request = indexedDB.open("myDatabase"); 

request.onerror = function(event) { 
    console.log("Failure."); 
}; 

request.onsuccess = function(event) { 
    console.log("Success."); 
}; 

pageMod.PageMod({ 
    include: "*", 
    contentScriptWhen: "start", 
     //contentScriptFile: ["./js/jquery.min.js", "./js/jquery-ui.min.js", "./js/Dexie.min.js", "./js/content-script.js"] 
    contentScriptFile: [data.url("js/jquery.min.js"), data.url("js/content-script.js"), data.url("js/jquery-ui.min.js"), data.url("js/Dexie.min.js")], 
    contentStyleFile: [data.url("css/jquery-ui.min.css")] 
}); 

içerik script.js ben Depolama Müfettiş kontrol Firefox

function transition(location, time, date) { 

    var db = new Dexie("myDatabase"); 
    db.version(1).stores({ 
     likes: 'url, date, time' 
    }); 

    db.open(); 

    db.likes.add({url: location, date: date, time: time}).then (function(){ 

     alert("Informations are added."); 

    }).catch(function(error) { 
     alert("There's an error: " + error); 
    }); 

} 

çalışmaz // bölüm Ayrıca veritabanına hiçbir şey eklenmez. Bir daha fazla ayrıntı: Bence betik yüklendikten kaynaklanabileceğimi düşünüyorum çünkü DOM hazır olduğunda her şeyi yüklemek için içerik-script.js başlangıcında tanımladım (belki, ama bunun neden olup olmadığından emin değilim, denedim) contentScriptWhen parametresinde "," hazır "ve" son "u başlatın). içerik script.js içinde

document.addEventListener("DOMContentLoaded", function(event) { 

Her şey bu olay dinleyicisi içindedir.

+0

Eğer geliştirici araçları konsolunda herhangi bir hata alabilirim:

son Dexie v1.3.6 deneyin ve yapılacak

? Firefox eklentisini veya Firefox eklentisini WebExtensions kullanıyor musunuz? –

+0

@JaromandaX Nope, bu da garip, konsolda bununla ilgili herhangi bir hata göremiyorum. JPM kullanıyorum. – Nikola

cevap

1

Dexie varsayılan olarak pencere veya kendinden IndexedDB kullanacaktır. Bir firefox eklentisinde bir pencerede çalışmıyor, bu yüzden Dexie bunu bulamıyor. Dexie v1.3.6'da, indekslenmişDB API'si kurucuda sağlanabilir.

var idb = require('sdk/indexed-db'); 
var db = new Dexie("myDatabase", { 
    indexedDB: idb.indexedDB, 
    IDBKeyRange: idb.IDBKeyRange 
}); 
+0

Cevabınız için teşekkürler. Hala çalışmıyor, ancak en azından veri eklemeye çalıştığımda bir hatayla karşılaştım: 'MissingAPIError: indexedDB API bulunamadı. IE10 + kullanıyorsanız, kodunuzu bir sunucu URL'sinde (yerel olarak değil) çalıştırdığınızdan emin olun. Safari kullanıyorsanız, bu FF 47 çalışması gerekir, IndexedDB Şimdi gerçekten kafam karıştı polyfill.' eklemeyi unutmayın ... – Nikola

+0

Eğer Dexie v1.3.6 kullanıyor ve alçaltır dahil doğru IndexedDB büyü emin misiniz ve uppers? –

+0

Evet, En son Dexie sürümünü GitHub'dan indirdim ve iki kez tüm kodu kontrol ettim. Sadece emin olmak için - ilk satır _index.js_'a gider ve db değişkeniyle birlikte bölüm benim _content script_'a gider? – Nikola