2011-05-03 9 views
7

Estoy buscando un mecanismo de almacenamiento que persista en todos los sitios web. Tengo números/tipos de datos primitivos que necesito almacenar. localStorage no funciona para mí porque está bajo la misma política de origen. Necesito que mis datos sean los mismos en todos los sitios web, pero son muy específicos de las pestañas y se accede a ellos a través de los contenidos.¿Alternativas de extensión de Chrome al almacenamiento local?

¿Alguien podría sugerir un mecanismo adecuado para lograr esto?

EDIT: Actualmente estoy implementando el primer código de respuestas y no estoy mirando mucho. Tengo el siguiente ...

background.html

nota: tabStorage es una variable de clase en esta función

function store(){ 
    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if(request.req == "save") { 
     tabStorage[sender.tab.id] = request.data; 
     } 

    if(request.req == "load") { 
     sendResponse(tabStorage[sender.tab.id]); 
    } 
    }); 
} 

contentscript.js

respuesta está volviendo undefined

chrome.extension.sendRequest({req: "load"}, function(response) { 
      console.log("getting stak"); 
      console.log(response.data); 
}); 

¿Qué estoy haciendo mal? el código está accediendo tanto a la carga como a guardar, así sé que está llegando y regresando, pero está volviendo indefinido. ¿por qué?

+0

Al menos comentario si vas a downvote. – Skizit

Respuesta

9

Debe usar el localStorage propio de la extensión al que accede desde una página de fondo. Si necesita esta información en un script de contenido, debe enviar una solicitud a una página de fondo utilizando messaging, léalo allí y envíe un resultado a un script de contenido en una respuesta.

ACTUALIZACIÓN Si no necesita el almacenamiento para mantener los valores entre los reinicios del navegador, entonces no necesita el localStorage. Simplemente almacene todo en una página de fondo e identifique las pestañas con sus identificadores. La página de fondo mantendrá los valores siempre que se abra el navegador. Por ejemplo: la escritura

contenido:

//save 
chrome.extension.sendRequest({cmd: "save", data: {param1: "value1", param2: "value2"}); 
... 
//load 
chrome.extension.sendRequest({cmd: "load"}, function(response) { 
    console.log("tab data:", response) 
}); 

página de fondo:

var tabStorage = []; 
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if(request.cmd == "save") { 
     tabStorage[sender.tab.id] = request.data; 
    } 

    if(request.cmd == "load") { 
     sendResponse(tabStorage[sender.tab.id]); 
    } 
}); 
+0

La página de fondo no me permite mantener las cosas en una tabla, ¿verdad? Quiero diferentes valores para diferentes pestañas. – Skizit

+0

@Skizit, ¿a qué te refieres con pestaña - dominio o pestaña real? – serg

+0

Me refiero a una pestaña real como las pestañas dentro del navegador. Quiero que cada pestaña tenga su propio almacenamiento. – Skizit

Cuestiones relacionadas