データを 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 のすべてがこのイベント リスナー内にあります。