2012-12-10 12 views
6

Sto scrivendo la mia prima estensione di Chrome e l'ho appena iniziato poche ore fa. Tutto ha funzionato bene quando è stato codificato. In sostanza, sto riempiendo un modulo di 8 pagine. Ogni pagina del modulo corrisponde a uno script di contenuto separato. Gli script contenuti utilizzati per cercare qualcosa di simile: (trovare i campi è un po 'più difficile, dato che sono non standard, ma io non sono preoccupato per that..that lavora part)Passare più variabili allo script di contenuto chrome

var first_name = 'John'; 
var last_name = 'Doe'; 
... 
... 
document.getElementById('first_name').value = first_name; 
document.getElementById('last_name').value = last_name; 

Questo ha funzionato bene (per me), ma voglio distribuirlo a poche persone, nessuno dei quali vorrebbe/potrebbe usare l'estensione dal codice sorgente, modificando direttamente le variabili. Quindi ho creato una pagina "Opzioni", usando questo esempio: https://developer.chrome.com/trunk/extensions/options.html

La pagina delle opzioni è un modello del modulo da compilare e qui ogni utente può immettere i valori predefiniti. La mia funzione save_options() fondamentalmente lo fa (pseudocodice):

foreach(fields as field) { 
    localStorage[field] = document.getElement....(field); 
} 

Questo funziona correttamente. Salva correttamente, visualizza i valori memorizzati, ecc.

Il problema si presenta quando provo ad accedere alle variabili dallo script di contenuto. Da quello che ho letto, questo non può essere fatto (direttamente), e ci sono vari metodi online che mostrano come farlo. Voglio fare qualcosa di simile (la trascrizione dei contenuti):

var first_name = localStorage["first_name"]; 
var last_name = localStorage["last_name"]; 
... 
... 
document.getElementById('first_name').value = first_name; 
document.getElementById('last_name').value = last_name; 

Le mie domande sono:

1) Per quelli di voi che hanno affrontato con estensioni di Chrome/localStorage/chrome.storage/etc, è lì un modo "migliore" per farlo?

2) Qual è il modo più efficiente per impostare tutti i nomi/i valori delle variabili? Preferirei un ciclo (come sopra) per impostare ogni campo con una richiesta separata. Sto calcolando la media di 10 campi per pagina.

(probabilmente potrei usare un lungo, sotto forma di disordinato http://developer.chrome.com/extensions/messaging.html, ma spero in una soluzione più efficiente/estendibile/elegante)

Ogni ingresso è apprezzato!

+0

Da quello che ho letto, gli script contenuti non sono in grado di accedere localStorage (sandbox). Mi sto perdendo qualcosa? –

+1

Oh bene, in questo caso, è possibile ottenere le cose tramite [messaggio che passa] (http://developer.chrome.com/extensions/messaging.html) a uno script in background. –

+0

chrome.extension.sendMessage ({ saluto: "ciao" }, funzione (risposta) { console.log (response.farewell); }); –

risposta

8

Una soluzione è l'utilizzo di Messaging Passing, che hai menzionato.

Un'altra soluzione (meglio, credo) è l'API chrome.storage (Vedere http://developer.chrome.com/extensions/storage.html per ulteriori informazioni). L'API di archiviazione può essere utilizzata direttamente in entrambe le pagine di sfondo e script di contenuto e Chrome verrà automaticamente sincronizzato se si memorizzano valori in chrome.storage.sync. L'unica differenza sostanziale è che localStorage questa API è asincrono, in modo da avere di scriverti codice come

chrome.storage.sync.get(['first_name', 'last_name'], function(items){ 
    document.getElementById('first_name').value = items['first_name']; 
    document.getElementById('last_name').value = items['last_name']; 
}); 
Problemi correlati