6

データを IndexedDB に保存するためのコンテンツ スクリプトを含む Firefox アドオンを開発しています。同じコードは、Chrome 拡張機能では問題なく機能しますが、Firefox 拡張機能では機能しません。Firefox では、データをデータベースに書き込む必要がある部分まで、すべて正常に動作します。

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

}

Storage Inspectorもチェックインしましたが、データベースには何も追加されません。もう1つ詳細: content-script.js の開始時に、DOM の準備ができたらすべてをロードするように定義したため、問題はスクリプトのロードによって引き起こされている可能性があると思います (おそらく、それが原因であるかどうかはわかりませんが、試してみました) contentScriptWhenパラメータの start" 、 "ready" 、および "end" )。

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

content-script.js のすべてがこのイベント リスナー内にあります。

4

1 に答える 1

1

Dexie はデフォルトで window または self からの indexedDB を使用します。Firefox ではアドオンがウィンドウで実行されていないため、おそらく Dexie はそれを見つけられません。Dexie v1.3.6 では、indexedDB API をコンストラクターで提供できます。

最新の Dexie v1.3.6 を試してください:

var idb = require('sdk/indexed-db');
var db = new Dexie("myDatabase", {
    indexedDB: idb.indexedDB,
    IDBKeyRange: idb.IDBKeyRange
});
于 2016-04-11T09:56:21.317 に答える