2016-02-20 16 views
6

Sto sviluppando un componente aggiuntivo di Firefox con alcuni script di contenuto per salvare i dati in IndexedDB. Lo stesso codice funziona perfettamente nell'estensione di Chrome, ma non nell'estensione di Firefox. Su Firefox tutto funziona fino alla parte in cui i dati devono essere scritti nel database.Lo script di contenuto del componente aggiuntivo di Firefox non scrive 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")] 
}); 

content-script.js // parte in cui non funziona in 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); 
    }); 

} 

ho controllato Storage Inspector Inoltre, nulla viene aggiunto al database. Ancora un dettaglio: penso che il problema potrebbe essere causato dal caricamento di script perché ho definito all'inizio di content-script.js di caricare tutto quando DOM è pronto (forse, ma non sono sicuro che sia causato da questo, ho provato " avviare "," pronto "e" fine "in contentScriptWhen parametro).

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

Tutto in content-script.js è all'interno di questo listener di eventi.

+0

cosa si ottiene eventuali errori nella console di strumenti di sviluppo? Stai usando l'estensione JPM o WebExtensions in firefox? –

+0

@JaromandaX No, il che è strano, non ho alcun errore relativo a ciò nella console. Sto usando JPM. – Nikola

risposta

1

Per impostazione predefinita, Dexie utilizzerà indexedDB dalla finestra o da sé. In un componente aggiuntivo di Firefox non sono in esecuzione in una finestra, quindi probabilmente Dexie non lo trova. In Dexie v1.3.6, l'API indexedDB può essere fornita nel costruttore.

Prova l'ultima v1.3.6 Dexie e fare:

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

Grazie per la risposta. Non funziona ancora, ma almeno ho finalmente un errore quando provo ad aggiungere/ottenere dati: 'MissingAPIError: indexedDB API non trovata. Se si utilizza IE10 +, assicurarsi di eseguire il codice su un URL del server (non localmente). Se utilizzi Safari, assicurati di includere indexedDB polyfill. Ora sono molto confuso, dovrebbe funzionare su FF 47 ... – Nikola

+0

Sei sicuro di utilizzare Dexie v1.3.6 e di eseguire l'ortografia di IndexedDB correttamente, compresi gli abbassa e tomaie? –

+0

Sì, ho scaricato l'ultima versione di Dexie da GitHub e ho verificato l'intero codice due volte. Solo per essere sicuri - la prima riga va a _index.js_ e parte con la variabile db va al mio _content script_? – Nikola

Problemi correlati