L'oggetto HTML5 localStorage è isolato per pagina / dominio? Mi chiedo come potrei nominare le chiavi localStorage. Ho bisogno di un prefisso separato? O posso nominarli come voglio?
L'oggetto HTML5 localStorage è isolato per pagina / dominio? Mi chiedo come potrei nominare le chiavi localStorage. Ho bisogno di un prefisso separato? O posso nominarli come voglio?
Risposte:
È per dominio e porta (le stesse regole di segregazione della stessa politica di origine ), per renderlo per pagina dovresti usare una chiave basata sull'approccio locationo su qualche altro approccio.
Non hai bisogno di un prefisso, usane uno se ne hai bisogno però. Inoltre, sì, puoi nominarli come preferisci.
protocol://host:portcombinazione.
I negozi sono per origine , dove "origine" è uguale a quello della stessa politica di origine (una combinazione di schema [ httpvs. https, ecc.], Porta e host). Dalle specifiche :
Ogni contesto di navigazione di livello superiore ha un set unico di aree di memorizzazione della sessione, una per ogni origine.
Pertanto, l'archiviazione per http://a.example.come l'archiviazione per http://b.example.comsono separati (e sono entrambi separati da http://example.com) in quanto sono tutti host diversi. Allo stesso modo, http://example.com:80e http://example.com:8080e https://example.comsono tutte origini diverse.
Non esiste alcun meccanismo integrato nella memoria Web che consente a un'origine di accedere alla memoria di un'altra.
Nota che è origine , non URL, quindi http://example.com/page1ed http://example.com/page2entrambi hanno accesso all'archivio per http://example.com.
Sì, ogni dominio / sottodominio ha un archivio locale diverso e puoi chiamare le chiavi come vuoi (prefisso non richiesto).
Per ottenere una chiave è possibile utilizzare la chiave del metodo (indice) come
localStorage.key(0);
Prima c'era un oggetto chiamato globalStorage in cui si potevano avere più localStorage, ma è stato deprecato dalle specifiche
Come altri hanno sottolineato, localStorage è unico per protocollo, host e porta. Se vuoi un modo pratico per controllare la tua memoria con chiavi con prefisso, ti suggerisco localDataStorage .
Non solo aiuta a imporre l'archiviazione condivisa segmentata all'interno dello stesso dominio mediante il prefisso delle chiavi, ma archivia in modo trasparente i tipi di dati javascript (Array, Boolean, Date, Float, Integer, String e Object), fornisce offuscamento leggero dei dati, comprime automaticamente stringhe e facilita la query per chiave (nome) e la query per valore (chiave).
[DISCLAIMER] Sono l'autore dell'utilità [/ DISCLAIMER]
Esempi:
// instantiate our first storage object
// internally, all keys will use the specified prefix, i.e. passphrase.life
var localData = localDataStorage( 'passphrase.life' );
localData.set( 'key1', 'Belgian' )
localData.set( 'key2', 1200.0047 )
localData.set( 'key3', true )
localData.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } )
localData.set( 'key5', null )
localData.get( 'key1' ) --> 'Belgian'
localData.get( 'key2' ) --> 1200.0047
localData.get( 'key3' ) --> true
localData.get( 'key4' ) --> Object {RSK: Array(5)}
localData.get( 'key5' ) --> null
// instantiate our second storage object
// internally, all keys will use the specified prefix, i.e. prismcipher.com
var localData2 = localDataStorage( 'prismcipher.com' );
localData2.set( 'key1', 123456789 ) // integer
localData2.get( 'key1' ) --> 123456789
Come puoi vedere, i valori primitivi sono rispettati e puoi creare diverse istanze per controllare la tua memoria.
È disponibile ovunque su quel dominio come suggerito da Nick, in alternativa c'è sessionStorage funziona in modo leggermente diverso in quanto è distinto dalla finestra del browser stesso. Vale a dire che altre schede o finestre sullo stesso dominio non hanno accesso alla stessa copia dell'oggetto di archiviazione.