You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Gli oggetti web storage `localStorage` e `sessionStorage` permetto di salvare le coppie key/value nel browser.Ciò che è interessante è che i dati sopravvivono al ricaricamento della pagina (per `sessionStorage`) e anche in seguito a un restart del browser (for`localStorage`). Vedremo come.
3
+
Gli oggetti web storage `localStorage` e `sessionStorage` permetto di salvare le coppie key/value nel browser.Ciò che è interessante è che i dati rimangono memorizzati anche in seguito al ricaricamento della pagina (per `sessionStorage`) e anche in seguito a un riavvio del browser (per`localStorage`). Vedremo come.
4
4
5
-
Abbiamo già i cookies. Perché usiamo altri oggetti?
5
+
Abbiamo già a disposizione i cookies. Perché usare altri oggetti?
6
6
7
7
- Rispetto ai cookies, gli oggetti web storage non vengono inviati al server con ogni richiesta. Per questo motivo, possiamo archiviarne molti di più. La maggior parte dei browser permette almeno 2 megabytes di dati (o più) e possiedono impostazioni per configurare questa scelta.
8
8
- Inoltre, il server non può manipolare la memorizzazione degli oggetti tramite HTTP headers. Tutto viene fatto in JavaScript.
9
-
-l'archiviazione è legata alla sorgete (origin) (domain/protocol/port triplet). Questo perché, protocolli differenti o sottodomini deducono diverse archiviazioni a oggetti e non possono accedere ai dati tra di loro.
9
+
-L'archiviazione è legata alla sorgete (origin) (domain/protocol/port triplet). Questo perché, protocolli differenti o sotto domini deducono diverse archiviazioni a oggetti e non possono accedere ai dati tra di loro.
10
10
11
11
Le due archiviazioni a oggetti propongono stessi metodi e proprietà:
12
12
13
-
-`setItem(key, value)` -- archivia la coppia key/value.
14
-
-`getItem(key)` -- ottiene il valore dalla key.
15
-
-`removeItem(key)` -- rimuove la key con il suo value.
16
-
-`clear()` -- cancella tutto.
17
-
-`key(index)` -- ottieni la key in una posizione data.
18
-
-`length` -- il numero di oggetti archiviati.
13
+
-`setItem(key, value)`: memorizza la coppia key/value.
14
+
-`getItem(key)`: lettura del valore dalla key.
15
+
-`removeItem(key)`: rimuove la key, ed il relativo value.
16
+
-`clear()`: rimuove tutti gli elementi.
17
+
-`key(index)`: lettura della key all'indice `index`.
18
+
-`length`: il numero di oggetti archiviati.
19
19
20
20
Come potete vedere, è simile alla collezione `Map` (`setItem/getItem/removeItem`), mantiene comunque l'ordine degli elementi e permette il loro accesso tramite indice con `key(index)`.
21
21
22
22
Vediamo come funziona.
23
23
24
24
## localStorage demo
25
25
26
-
Le funzioni principali di `localStorage` sono:
26
+
Le caratteristiche principali di `localStorage` sono:
27
27
28
28
- Condivisione tra le tabs e finestre provenienti dalla stessa origine.
29
29
- I dati non scadono. Rimangono in seguito a un riavvio del browser o dell'intero sistema operativo.
Dobbiamo solo essere nello stesso punto di partenza (domain/port/protocol), l'url di destinazione può essere differente.
43
+
Dobbiamo solo essere nello stesso punto di partenza (domain/port/protocol), l'URL di destinazione può essere differente.
44
44
45
-
Il `localStorage` è condiviso tra tutte le finestre con la stessa provenienza, quindi se impostiamo i dati in una finestra, il cambiamento diventa visibile in un altra scheda.
45
+
Il `localStorage` è condiviso tra tutte le finestre con la stessa provenienza, quindi se impostiamo i dati in una finestra, il cambiamento diventa visibile anche nelle altre schede.
46
46
47
-
## Object-like access
47
+
## Accesso in stile oggetto
48
48
49
-
Possiamo usare un plain object per getting/setting le keys, in questo modo:
49
+
Possiamo usare la stessa sintassi di lettura/scrittura degli oggetti per accedere agli elementi, in questo modo:
50
50
51
51
```js run
52
-
//set key
52
+
//imposta un nuovo valore
53
53
localStorage.test=2;
54
54
55
-
//get key
55
+
//legge il valore
56
56
alert( localStorage.test ); // 2
57
57
58
-
//remove key
58
+
//rimuove il valore
59
59
deletelocalStorage.test;
60
60
```
61
61
62
-
Questo è permetto per ragioni storiche, e principalmente funziona, ma generalmente non è raccomandato, perché:
62
+
Questo è permesso per ragioni storiche, e principalmente funziona, ma generalmente non è raccomandato, perché:
63
63
64
-
1. Se la key è generata dall'utente, può essere qualsiasi cosa,, come `length` o `toString`, o un altro built-in method of`localStorage`. In questo caso `getItem/setItem` funziona normalmente, mentre l'accesso object-like fallisce:
64
+
1. Se la key è generata dall'utente, può essere qualsiasi cosa, come `length` o `toString`, o un altro metodo integrato di`localStorage`. In questo caso `getItem/setItem` funziona normalmente, mentre l'accesso in stile oggetto non funziona:
2.C'è un evento `storage`, che si attiva quando modifichiamo dati. Questo evento non accade per accessi object-like. Vedremo più avanti nel capitolo.
70
+
2.C'è un evento `storage`, che viene emesso quando modifichiamo dati. Questo evento viene per gli accessi in stile oggetto. Vedremo più avanti nel capitolo.
71
71
72
-
## Looping sulle keys
72
+
## Cicli sulle keys
73
73
74
74
Come abbiamo visto, i metodi forniscono funzionalità get/set/remove. Ma come otteniamo tutti i valori o keys salvate?
75
75
76
-
Sfortunatamente, gli objects archiviati non sono iterabili.
76
+
Sfortunatamente, gli oggetti archiviati non sono iterabili.
77
77
78
-
Una soluzione sarebbe quella di eseguire un loop su di loro come una matrice:
78
+
Una soluzione sarebbe quella di eseguire un loop su di loro come un array:
79
79
80
80
```js run
81
81
for(let i=0; i<localStorage.length; i++) {
@@ -91,11 +91,11 @@ L'iterazione avverrà sulle keys, ma anche sugli outputs di campi associati ad a
91
91
```js run
92
92
// cattivo esempio
93
93
for(let key in localStorage) {
94
-
alert(key); // mostra getItem, setItem e altre funzioni built-in
94
+
alert(key); // mostra getItem, setItem e altre funzioni integrate
95
95
}
96
96
```
97
97
98
-
... dunque dobbiamo filtrare i camp dal prototipo con il controllo `hasOwnProperty`:
98
+
... dunque dobbiamo filtrare i campi dal prototype con il controllo `hasOwnProperty`:
99
99
100
100
```js run
101
101
for(let key in localStorage) {
@@ -106,7 +106,7 @@ for(let key in localStorage) {
106
106
}
107
107
```
108
108
109
-
...oppure ottieni le keys "proprie" con `Object.keys`e esegui il loop su di loro se necessario:
109
+
...oppure possiamo ottenere le keys "proprie" con `Object.keys`ed eseguire il loop su di loro se necessario:
110
110
111
111
```js run
112
112
let keys = Object.keys(localStorage);
@@ -115,21 +115,21 @@ for(let key of keys) {
115
115
}
116
116
```
117
117
118
-
Un lavoro extra, poiché `Object.keys` restituisce solo le keys che appartengono all oggetto, ignorando il prototipo.
118
+
Un lavoro extra, poiché `Object.keys` restituisce solo le keys che appartengono all oggetto, ignorando il prototype.
119
119
120
120
121
-
## Strings only
121
+
## Solo stringhe
122
122
123
-
Notare che sia key che i value devono essere stringhe.
123
+
Da notare che sia key che i value devono essere stringhe.
124
124
125
-
Se ci fosse un altro tipo di dato,come un numero, o un object, verrebbe automaticamente convertito a stringa:
125
+
Se ci fosse un altro tipo di dato,come un numero, o un object, verrebbe automaticamente convertito a stringa:
@@ -139,7 +139,7 @@ let user = JSON.parse( sessionStorage.user );
139
139
alert( user.name ); // John
140
140
```
141
141
142
-
inoltre è possibile convertire a stringa l'intero archivio di object, per esempio per motivi di debugging:
142
+
Inoltre è possibile convertire a stringa l'intero archivio di oggetti, per esempio per motivi di debugging:
143
143
144
144
```js run
145
145
// aggiunte le opzioni di formattazione a JSON.stringify per rendere object migliore
@@ -154,46 +154,46 @@ L'oggetto `sessionStorage` è usato molto meno spesso del `localStorage`.
154
154
Proprietà e metodi sono gli stessi, ma è più limitato:
155
155
156
156
- La `sessionStorage` esiste solo all'intero della tab del browser corrente.
157
-
- Unaltra tab con la stessa pagina avrà un archiviazione differente.
158
-
-Viene comunque condivisa tra iframes nella stessa tab (assumendo che la loro provenienza sia la stessa).
157
+
- Un'altra tab con la stessa pagina avrà un archiviazione differente.
158
+
-Viene comunque condivisa tra iframes nella stessa tab (assumendo che la loro provenienza sia la stessa).
159
159
-I dati sopravvivono al refresh della pagina, ma non alla chiusura/apertura della tab.
160
160
161
161
Vediamo come si comporta.
162
162
163
-
Usa questo codice...
163
+
Esegui questo codice...
164
164
165
165
```js run
166
166
sessionStorage.setItem('test', 1);
167
167
```
168
168
169
-
...Poi ricarica la pagina. ora puoi comunque ottenere i dati:
169
+
...Poi ricarica la pagina. Pra potrai comunque ottenere i dati:
170
170
171
171
```js run
172
-
alert( sessionStorage.getItem('test') ); // after refresh: 1
172
+
alert( sessionStorage.getItem('test') ); // dopo il refresh: 1
173
173
```
174
174
175
-
...Ma se apri la stessa pagina in un'altra tab, e provi di nuovo, dal codice otterrai `null`, Significa"non è stato trovato nulla".
175
+
...Ma se apri la stessa pagina in un'altra tab, e provi di nuovo, dal codice otterrai `null`, ovvero "non è stato trovato nulla".
176
176
177
177
Questo perché `sessionStorage` è legato non solo all'origine, ma anche alla tab del browser. Per questo motivo, `sessionStorage` è usato sporadicamente.
178
178
179
-
## Storage event
179
+
## Evento di storage
180
180
181
-
Quando i dati vengono aggiornati in `localStorage` o `sessionStorage`, [storage](https://www.w3.org/TR/webstorage/#the-storage-event)un evento si attiva, con le seguenti proprietà:
181
+
Quando i dati vengono aggiornati in`localStorage` o `sessionStorage`, un evento di [storage](https://www.w3.org/TR/webstorage/#the-storage-event) viene emesso, con le seguenti proprietà:
182
182
183
-
- `key` – La key che è stata cambiata (`null` if `.clear()` is called).
184
-
- `oldValue` – Il vecchio valore (`null` if the key is newly added).
185
-
- `newValue` – il nuovo valore (`null` if the key is removed).
186
-
- `url` – L'url del documento in cui è avvenuto l'aggiornamento.
187
-
- `storageArea` – o `localStorage` o `sessionStorage` object in cui è avvenuto l'aggiornamento.
183
+
-`key`:La key che è stata modificata (`null`se è stato invocato `.clear()`).
184
+
-`oldValue`:Il vecchio valore (`null`se la chiave è nuova).
185
+
-`newValue`:il nuovo valore (`null`se la chiave è sta rimossa).
186
+
-`URL`:L'URL del documento in cui è avvenuto l'aggiornamento.
187
+
-`storageArea`: se l'aggiornamento è avvenuto in `localStorage` o `sessionStorage`.
188
188
189
-
La cosa importante è: l'evento si attiva in tutti gli objects `window` dove l'archivio è accessibile, ad eccezione per quello in cui è stato causato.
189
+
La cosa importante è: l'evento si attiva in tutti gli oggetti`window` dove l'archivio è accessibile, ad eccezione per quello in cui è stato causato.
190
190
191
191
Elaboriamo.
192
192
193
-
Immaginate di avere due finestre aperte con lo stesso sito all'interno.Quindi `localStorage` è condiviso tra le due.
193
+
Immaginate di avere due finestre aperte con lo stesso sito all'interno.Quindi`localStorage` è condiviso tra le due.
194
194
195
195
```online
196
-
dovresti aprire questa pagina in due browser per testare il seguente codice.
196
+
Dovresti aprire questa pagina in due browser per testare il seguente codice.
197
197
```
198
198
199
199
Se entrambe le finestre sono connesse a `window.onstorage`, allora reagiranno agli aggiornamenti che accadono in una delle due.
@@ -202,20 +202,22 @@ Se entrambe le finestre sono connesse a `window.onstorage`, allora reagiranno ag
202
202
// attiva un aggiornamento fatto dallo stesso archivio degli altri documenti
Notare che l'evento contiene:`event.url`-- l'url del documento in cui i dati sono stati aggiornati.
212
-
Inoltre, `event.storageArea` contiene lo storage object -- l'evento è lo stesso per entrambi `sessionStorage` e `localStorage`, quindi `event.storageArea` si rivolge a quello che è stato modificato. Potremmo anche impostare qualcosa all'interno, per "rispondere" al cambiamento.**That allows different windows from the same origin to exchange messages.**
211
+
Notare che l'evento contiene: `event.URL` -- l'URL del documento in cui i dati sono stati aggiornati.
212
+
Inoltre, `event.storageArea` contiene lo storage object -- l'evento è lo stesso per entrambi `sessionStorage` e `localStorage`, quindi `event.storageArea` si rivolge a quello che è stato modificato. Potremmo anche impostare qualcosa all'interno, per "rispondere" al cambiamento.
213
213
214
-
I Browser moderni supportano [Broadcast channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), API speciale per comunicazione inter-finestra provenienti dalla stessa sorgente, possiede molte più funzione ma è meno supportata.Esistono librerie che sostituiscono quella API,basate su `localStorage`, che lo rendono disponibile ovunque.
214
+
**That allows different windows from the same origin to exchange messages.**
215
215
216
-
## Summary
216
+
I browser moderni supportano [Broadcast channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), un API speciale per comunicazione inter-finestra provenienti dalla stessa sorgente, possiede molte più funzionalità ma è meno supportata. Esistono librerie che sostituiscono quella API, basate su `localStorage`, che lo rendono disponibile ovunque.
217
217
218
-
Web storage objects `localStorage` e `sessionStorage` permettono di archiviare key/value nel browser.
218
+
## Riepilogo
219
+
220
+
Gli oggetti web storage `localStorage` e `sessionStorage` permettono di archiviare key/value nel browser.
219
221
- Sia `key` e `value` devono essere stringhe.
220
222
- Il limite è 2mb+, dipende dal browser.
221
223
- Non scadono.
@@ -224,21 +226,21 @@ Web storage objects `localStorage` e `sessionStorage` permettono di archiviare k
224
226
|`localStorage`|`sessionStorage`|
225
227
|----------------|------------------|
226
228
| Condivise tra tutte le tabs e finestre provenienti dalla stessa sorgente| Visibile all'interno di una tab del browser, incluso iframes della stessa origine |
227
-
|sopravvivono al riavvio del browser |sopravvivono al refresh della pagina (ma non alla chiusura della tab) |
229
+
| Sopravvivono al riavvio del browser | Sopravvivono al refresh della pagina (ma non alla chiusura della tab) |
- `removeItem(key)`: rimuove la chiave con il suo valore.
236
+
- `clear()`: cancella tutto.
237
+
- `key(index)`: legge il valore all'indice`index`.
238
+
-`length`: il numero di oggetti archiviati.
239
+
-Utilizza`Object.keys`per ottenere tutte le chiavi.
240
+
-Accediamo alle keys come proprietà degli oggetti, in questo caso l'evento `storage` non verrà emesso.
239
241
240
-
Storageevent:
242
+
Evento di storage:
241
243
242
-
-attivato su chiamata di `setItem`, `removeItem`, `clear` .
243
-
-COntiene tutti i data riguardo l'operazione (`key/oldValue/newValue`), il documento `url` e lo storage object `storageArea`.
244
-
- Attivato su tutti gli oggetti `window` che hanno accesso all'archivio eccetto quello da cui è stato generato (all'interno di una tab per `sessionStorage`, globalmente per `localStorage`).
244
+
- Emesso su chiamata di `setItem`, `removeItem`, `clear` .
245
+
- Contiene tutti i data riguardo l'operazione (`key/oldValue/newValue`), il documento `URL` e lo storage object `storageArea`.
246
+
-Emesso su tutti gli oggetti `window` che hanno accesso all'archivio eccetto quello da cui è stato generato (all'interno di una tab per `sessionStorage`, globalmente per `localStorage`).
0 commit comments