2016-02-20 7 views
6

Ich entwickle Firefox-Add-on, das einige Inhaltsskripts hat, um Daten in IndexedDB zu speichern. Derselbe Code funktioniert in der Chrome-Erweiterung einwandfrei, aber nicht in der Firefox-Erweiterung. Bei Firefox funktioniert alles bis zum Teil, wo Daten in die Datenbank geschrieben werden müssen.Inhaltsskript von Firefox Add-on schreibt nicht in 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")] 
}); 

inhalt script.js // Teil, in dem es nicht

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); 
    }); 

} 

ich eincheckte Storage Inspector in Firefox funktioniert Auch wird nichts zur Datenbank hinzugefügt. Ein weiteres Detail: Ich denke, dass das Problem durch das Laden von Skripten verursacht werden kann, weil ich am Anfang von content-script.js alles geladen habe, wenn DOM bereit ist (vielleicht, aber ich bin mir nicht sicher, ob es dadurch verursacht wurde) start "," ready "und" end "in contentScriptWhen Parameter).

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

Alles in inhalt script.js ist in diesem Ereignis-Listener.

+0

Sie Fehler in der Entwickler-Tools-Konsole erhalten Sie? Verwenden Sie JPM-Erweiterung oder WebExtensions in Firefox? –

+0

@JaromandaX Nein, das ist auch seltsam, ich bekomme keine Fehler im Zusammenhang mit dieser Konsole. Ich benutze JPM. – Nikola

Antwort

1

Dexie wird standardmäßig die indexedDB aus dem Fenster oder self verwenden. In einem Firefox Add-Ons laufen nicht in einem Fenster, so dass Dexie es wahrscheinlich nicht findet. In Dexie v1.3.6 kann die indexedDB-API im Konstruktor bereitgestellt werden.

die neueste Dexie v1.3.6 versuchen und zu tun:

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

Danke für die Antwort. Es funktioniert immer noch nicht, aber zumindest bekomme ich schließlich einen Fehler, wenn ich versuche, Daten hinzuzufügen/zu bekommen: 'MissingAPIError: indexedDB API nicht gefunden. Stellen Sie bei Verwendung von IE10 + sicher, dass der Code auf einer Server-URL (nicht lokal) ausgeführt wird. Wenn Sie Safari verwenden, stellen Sie sicher, dass Sie indexedDB polylfill enthalten. Ich bin jetzt wirklich verwirrt, sollte es auf FF 47 funktionieren ... – Nikola

+0

Sind Sie sicher, dass Sie Dexie v1.3.6 verwenden und indexedDB korrekt buchstabieren, einschließlich senkt und Oberteil? –

+0

Ja, ich habe die neueste Version von Dexie von GitHub heruntergeladen und den ganzen Code zweimal überprüft. Nur um sicher zu sein - die erste Zeile geht an _index.js_ und der Teil mit der Variablen db geht an mein _content-Skript_? – Nikola

Verwandte Themen