2016-02-20 24 views
6

Tôi đang phát triển tiện ích bổ sung Firefox có một số tập lệnh nội dung để lưu dữ liệu vào IndexedDB. Cùng một mã hoạt động hoàn toàn tốt trong phần mở rộng của Chrome, nhưng không hoạt động trong phần mở rộng của Firefox. Trên Firefox mọi thứ hoạt động tốt cho đến khi phần dữ liệu phải được ghi vào cơ sở dữ liệu.Kịch bản nội dung từ tiện ích bổ sung của Firefox không ghi vào 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")] 
}); 

nội dung script.js // phần mà nó không hoạt động trong 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); 
    }); 

} 

Tôi đã kiểm tra trong lưu trữ Thanh tra quá, không có gì được thêm vào cơ sở dữ liệu. Một chi tiết khác: Tôi nghĩ rằng vấn đề có thể do tải tập lệnh bởi vì tôi đã xác định khi bắt đầu content-script.js để tải mọi thứ khi DOM sẵn sàng (có thể, nhưng tôi không chắc liệu nó có gây ra bởi điều đó không, tôi đã thử " bắt đầu "," sẵn sàng "và" kết thúc "trong tham số contentScriptKhi thông số).

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

Mọi thứ trong nội dung script.js là bên lắng nghe sự kiện này.

+0

nào bạn nhận được bất kỳ lỗi nào trong các công cụ phát triển console? Bạn có đang sử dụng phần mở rộng JPM hoặc WebExtensions trong firefox không? –

+0

@ JaromandaX Không, điều lạ lùng quá, tôi không gặp bất kỳ lỗi nào liên quan đến điều này trong bảng điều khiển. Tôi đang sử dụng JPM. – Nikola

Trả lời

1

Dexie theo mặc định sẽ sử dụng chỉ mụcDB từ cửa sổ hoặc tự. Trong một add-on firefox không chạy trong một cửa sổ vì vậy có lẽ Dexie không tìm thấy nó. Trong Dexie v1.3.6, API indexedDB có thể được cung cấp trong hàm tạo.

Thử Dexie v1.3.6 mới nhất và làm:

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

Cảm ơn bạn đã trả lời. Nó vẫn không hoạt động, nhưng ít nhất tôi cuối cùng cũng gặp lỗi khi tôi cố thêm/lấy dữ liệu: 'MissingAPIError: không tìm thấy API indexedDB. Nếu sử dụng IE10 +, hãy đảm bảo chạy mã của bạn trên URL máy chủ (không phải cục bộ). Nếu sử dụng Safari, hãy chắc chắn bao gồm indexedDB polyfill.' Tôi thực sự bối rối ngay bây giờ, nó sẽ hoạt động trên FF 47 ... – Nikola

+0

Bạn có chắc là bạn đang sử dụng Dexie v1.3.6 và bạn đánh vần indexedDB một cách chính xác, bao gồm cả lowers và mũ? –

+0

Có, tôi đã tải xuống phiên bản Dexie mới nhất từ ​​GitHub và kiểm tra toàn bộ mã hai lần. Chỉ cần chắc chắn - dòng đầu tiên đi đến _index.js_ và một phần với biến db đi đến _content script_ của tôi? – Nikola

Các vấn đề liên quan