2015-11-25 49 views
6

Ho una app Kiosk di Chrome che ho bisogno di salvare i dati (alcuni byte come una stringa) tra l'accensione e lo spegnimento della macchina. Ma qualunque cosa proverò, il localStorage sembra essere cancellato al riavvio.Chrome App localStorage non persistente e chrome.storage non funziona

quando vado a chrome: // Ispezionare/# apps per ispezionare l'App di Chrome, non ci sono errori correlati nella console per quanto riguarda ad LocalStorage

all'interno di Chrome in un browser, vorrei semplicemente utilizzare localStorage ma questo non persiste quando si trova in un'app kiosk.

Esempio di codice:

window.localStorage.setItem(id, temp); 
window.localStorage.getItem(id); 

Seguendo i consigli qui: Persist data across single app kiosk mode executions ho una licenza di gestione di Chrome con le seguenti impostazioni definite, ma questo non sembra aver fatto alcuna differenza (vedi allegato JPG)

Con l'app Kiosk, ho il permesso di stoccaggio nel manifest.json

ho cercato di trasferirsi a chrome.storage ma ottengo un errore non definito quando e provo e faccio questo.Questo errore si verifica quando si esegue come app di Chrome e nel browser

Ho provato le soluzioni qui ma non funzionano. Sempre ottenere un errore non definito: https://groups.google.com/a/chromium.org/forum/#!topic/chromium-apps/_YcOT4PcdAQ

Chrome Management Settings


Aggiunto da commenti: CODICE:

chrome.storage.local.set({ 'key1': 'first', 'key2': 'second', 'key3': 'third', 'key4': 'fourth', 'key5': 'fifth' }, function() { console.debug('Settings saved'); }); 

<body class="trim full"> 
    <form id="kiosk" model="AppConfig" view="KioskView"> 
    <webview id="browser" src="link-to-my-website-which-calls-localstorage.com" style="width:100%; height:100%; position:absolute; top:0; left:0; right:0; bottom:0;"></webview> 
    </form> 
</body> 
+1

Inserisci il codice che hai usato per 'chrome.storage' e il testo esatto dell'errore. – wOxxOm

+0

@wOxxOm chrome.storage.local.set ({ \t 'key1': 'primo', \t 'key2': 'secondo', \t 'key3': 'terzo', \t 'key4': 'quarto', \t 'key5': ' quinto ' }, function() { \t \t console.debug (' Impostazioni salvate '); \t }); errore: TypeError: impossibile leggere la proprietà 'local' di undefined – James

+0

Il problema potrebbe essere che il codice viene chiamato dall'app Chrome tramite una visualizzazione Web? CODICE: James

risposta

7

Ci sono due contesti per localStorage in un app Chrome.

  1. Il codice dell'app stesso. localStorage è disabled for Chrome App code. L'unica soluzione è utilizzare l'API chrome.storage.

  2. (Il tuo caso)localStorage all'interno di una <webview>. È progettato per essere temporaneo per impostazione predefinita. Se si desidera che persista, è necessario utilizzare uno webview persistent partition.

    If the storage partition ID starts with persist: (partition="persist:googlepluswidgets"), the webview will use a persistent storage partition available to all guests in the app with the same storage partition ID. If the ID is unset or if there is no 'persist:' prefix, the webview will use an in-memory storage partition.

    <webview id="browser" 
         src="link-to-my-website-which-calls-localstorage.com" 
         style="width:100%; height:100%; position:absolute; top:0; left:0; right:0; bottom:0;" 
         partition="persist:browser"> 
    </webview> 
    

    notano che chrome.storage API non sarà esposto a contenuti WebView (a meno che non si inietta uno script).

+0

Ho aggiunto partition = "persistente: browser" ma il localStorage è ancora perso al riavvio. – James

+0

@Spencer Quello era un errore di battitura da parte mia, dovrebbe essere 'persist', non' persistent'. Leggere i documenti che ho collegato lo risolverebbe. – Xan

+0

ha funzionato. Grazie :) – James