Expérimental
Expose l'API IndexedDB pour les add-ons.
Utilisation
Les scripts en cours d'exécution dans les pages Web peuvent accéder à IndexedDB via window
. Par exemple:
window.indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;
var request = window.indexedDB.open("MyDatabase");
request.onerror = function(event) {
console.log("failure");
};
request.onsuccess = function(event) {
console.log("success");
};
Parce que votre code add-on principale ne peut pas accéder au DOM, vous ne pouvez pas faire cela. Mais vous pouvez utiliser le module indexed-db
pour y accéder:
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");
};
La plupart des objets qui mettent en Ćuvre l'API IndexedDB, tels que IDBTransaction , IDBOpenDBRequest , et IDBObjectStore , sont accessibles Ă travers l'objet IndexedDB lui-mĂȘme. < br>
L'API exposée par indexed-db
est presque identique à l'API DOM IndexedDB, donc on n'a pas répété sa documentation ici, référer vous à la documentation de l'API IndexedDB pour tous les détails.
La base de donnĂ©es créé sera unique et privĂ©e pour l'add-on, et n'est pas liĂ©s Ă une base de donnĂ©es de site. Le module ne peut pas ĂȘtre utilisĂ© pour interagir avec une base de donnĂ©es du site donnĂ©. Voir bug 778197 et bug 786688 .
Exemple
Cet exemple utilise l'API bouton d'action , qui est uniquement disponible Ă partir de Firefox 29 partir.
Voici un add-on complet qui ajoute deux boutons pour le navigateur: le bouton "Ajouter" ajoute le titre de l'onglet en cours à une base de données, tandis que le bouton intitulé «Liste» répertorie tous les titres dans la base de données .
L'add-on implémente les fonctions open()
, addItem()
et getItems()
pour ouvrir la base de données, ajouter un nouvel élément à la base de données, et d'obtenir tous les éléments de la base de données.
var { indexedDB, IDBKeyRange } = require('sdk/indexed-db');
var database = {};
database.onerror = function(e) {
console.error(e.value)
}
function open(version) {
var request = indexedDB.open("stuff", version);
request.onupgradeneeded = function(e) {
var db = e.target.result;
e.target.transaction.onerror = database.onerror;
if(db.objectStoreNames.contains("items")) {
db.deleteObjectStore("items");
}
var store = db.createObjectStore("items",
{keyPath: "time"});
};
request.onsuccess = function(e) {
database.db = e.target.result;
};
request.onerror = database.onerror;
};
function addItem(name) {
var db = database.db;
var trans = db.transaction(["items"], "readwrite");
var store = trans.objectStore("items");
var time = new Date().getTime();
var request = store.put({
"name": name,
"time": time
});
request.onerror = database.onerror;
};
function getItems(callback) {
var cb = callback;
var db = database.db;
var trans = db.transaction(["items"], "readwrite");
var store = trans.objectStore("items");
var items = new Array();
trans.oncomplete = function() {
cb(items);
}
var keyRange = IDBKeyRange.lowerBound(0);
var cursorRequest = store.openCursor(keyRange);
cursorRequest.onsuccess = function(e) {
var result = e.target.result;
if(!!result == false)
return;
items.push(result.value.name);
result.continue();
};
cursorRequest.onerror = database.onerror;
};
function listItems(itemList) {
console.log(itemList);
}
open("1");
var add = require("sdk/ui/button/action").ActionButton({
id: "add",
label: "Add",
icon: "./add.png",
onClick: function() {
addItem(require("sdk/tabs").activeTab.title);
}
});
var list = require("sdk/ui/button/action").ActionButton({
id: "list",
label: "List",
icon: "./list.png",
onClick: function() {
getItems(listItems);
}
});
Notez que pour exécuter cet add-on, vous aurez besoin de fournir des icÎnes nommées "add.png" et "list.png" dans le répertoire "data" de l'add-ons .
Globals
Propriétés
indexedDB
Permet de créer, ouvrir et supprimer des bases de données. Voir la documentation IDBFactory.
IDBKeyRange
Définit une plage de clés. Voir la documentation IDBKeyRange.
DOMException
Fournit des informations plus détaillées sur une exception. Voir la documentation DOMException.