Skip to content

Commit 0cc8918

Browse files
committed
Review Page: DOMContentLoaded, load, beforeunload, unload
1 parent 082f738 commit 0cc8918

File tree

2 files changed

+37
-37
lines changed

2 files changed

+37
-37
lines changed

2-ui/5-loading/01-onload-ondomcontentloaded/article.md

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,28 @@
22

33
Il ciclo di vita di una pagina HTML è costituito da 3 importanti eventi:
44

5-
- `DOMContentLoaded` -- il browser ha completamente caricato l'HTML, e l'alberto del DOM è stato costruito, ma risorse esterne come immagini `<img>` e i fogli di stile potrebbero ancora non essere stati caricati.
5+
- `DOMContentLoaded` -- il browser ha completamente caricato l'HTML, e l'albero del DOM è stato costruito, ma risorse esterne come immagini `<img>` e i fogli di stile potrebbero ancora non essere stati caricati.
66
- `load` -- non solo l'HTML è caricato ma anche tutte le risorse esterne: immagini, fogli di stile, ecc.
77
- `beforeunload/unload` -- l'utente sta lasciando la pagina.
88

99
Ogni evento potrebbe essere utile:
1010

11-
- `DOMContentLoaded` event -- il DOM è pronto, quindi l'handler può scorrere i nodi del DOM, inizializzare l'interfaccia.
12-
- `load` event -- tutte le risorse esterne sono caricate, quindi gli stile sono applicati, la dimensioni delle immagini nella pagina è nota, ecc.
13-
- `beforeunload` event -- l'utente sta lasciando la pagina: possiamo controllare se l'utente ha salvato le modifiche effettuate e chiedere loro se sono sicuri di voler lasciare la pagina.
14-
- `unload` -- l'utente ha quasi lasciato la pagina ma possiamo ancora effettuare alcune operazioni.
11+
- evento di `DOMContentLoaded` quando il DOM è pronto, quindi il gestore può scorrere i nodi del DOM, ed inizializzare l'interfaccia.
12+
- evento di `load` quando tutte le risorse esterne sono state caricate, ed anche gli stili sono stati applicati, le dimensioni delle immagini nella pagina è nota, ecc.
13+
- evento di `beforeunload` quando l'utente sta lasciando la pagina: possiamo controllare se l'utente ha salvato le modifiche effettuate ed eventualmente chiedergli se è sicuro di voler lasciare la pagina.
14+
- evento di `unload` quando l'utente ha quasi lasciato la pagina ma possiamo ancora effettuare alcune operazioni.
1515

1616
Esploriamo i dettagli di questi eventi.
1717

1818
## DOMContentLoaded
1919

20-
L'evento `DOMContentLoaded` avviene sull'oggetto `document`.
20+
L'evento `DOMContentLoaded` viene emesso dall'oggetto `document`.
2121

22-
Dobbiamo utilizzare `addEventListener` per catturarlo:
22+
Dobbiamo quindi utilizzare `addEventListener` per catturarlo:
2323

2424
```js
2525
document.addEventListener("DOMContentLoaded", ready);
26-
// not "document.onDOMContentLoaded = ..."
26+
// non "document.onDOMContentLoaded = ..."
2727
```
2828

2929
Per esempio:
@@ -33,7 +33,7 @@ Per esempio:
3333
function ready() {
3434
alert('DOM is ready');
3535
36-
// l'immagine non è stata ancora caricata(a meno che non fosse cachata quindi la dimensione è 0x0
36+
// l'immagine non è stata ancora caricata (a meno che non fosse già presente in cache) quindi la dimensione è 0x0
3737
alert(`Image size: ${img.offsetWidth}x${img.offsetHeight}`);
3838
}
3939
@@ -45,11 +45,11 @@ Per esempio:
4545
<img id="img" src="https://en.js.cx/clipart/train.gif?speed=1&cache=0">
4646
```
4747

48-
Nell'esempio l'handler dell'evento `DOMContentLoaded` si aziona quando il documento è car icato, quindi può vedere tutti gli elementi del DOM, compresa `<img>` sotto.
48+
Nell'esempio il gestore dell'evento `DOMContentLoaded` si aziona quando il documento è caricato, quindi può vedere tutti gli elementi del DOM, compresa `<img>` sotto.
4949

50-
Ma non aspetta che l'immagine si carichi. Quindi `alert` mostra zero come dimensione.
50+
Ma non aspetta che l'immagine si carichi. Per questo `alert` mostra zero come dimensione.
5151

52-
Ad una prima occhiata l'evento `DOMContentLoaded` è molto semplice. L'albero del DOM è pronto -- questo è l'evento. Ci sono alcune peculiarità però.
52+
Ad una prima occhiata l'evento `DOMContentLoaded` è molto semplice. Ci segnala che l'albero del DOM è pronto, tutto qui. Ci però sono alcune peculiarità.
5353

5454
### DOMContentLoaded e gli script
5555

@@ -81,14 +81,14 @@ Ci sono 2 eccezioni per questa regola:
8181

8282
### DOMContentLoaded e stili
8383

84-
I fogli di stile esterni non influenza il DOM, quindi `DOMContentLoaded` non aspetta il loro caricamento.
84+
I fogli di stile esterni non influenzano il caricamento del DOM, quindi `DOMContentLoaded` non aspetta il loro caricamento.
8585

86-
Ma c'è una trappola. Se abbiamo uno script dopo uno stile quello script deve aspettare affinche il foglio di stile è caricato.
86+
Ma c'è una trappola. Se abbiamo uno script dopo uno stile quello script deve aspettare affinché il foglio di stile sia statio caricato.
8787

8888
```html run
8989
<link type="text/css" rel="stylesheet" href="style.css">
9090
<script>
91-
// lo script non viene eseguito finche il foglio di stile non è caricato
91+
// lo script non viene eseguito finché il foglio di stile non è caricato
9292
alert(getComputedStyle(document.body).marginTop);
9393
</script>
9494
```
@@ -99,22 +99,22 @@ Quindi `DOMContentLoaded` aspetta il caricamento degli script e inoltre anche qu
9999

100100
### Riempimento automatico nativo del browser
101101

102-
Firefox, Chrome e Opera riempiono automaticamente le form durante l'evento `DOMContentLoaded`.
102+
Firefox, Chrome e Opera riempiono automaticamente i form durante l'evento `DOMContentLoaded`.
103103

104-
Per esempio, se la pagina a una form con username e password, e il browser si ricorda i valori, allora durante l'evento `DOMContentLoaded` prova a riempire automaticamente i campi (se approvato dall'utente).
104+
Per esempio, se la pagina contiene un form con username e password, e il browser ha memorizzato i valori, allora durante l'evento `DOMContentLoaded` prova a riempire automaticamente i campi (se approvato dall'utente).
105105

106-
Se l'evento `DOMContentLoaded` viene rinviato a causa dei lunghi tempi di caricamento degli script, allora anche il riempimento automatico dovrà attendere. Probabilmente avrete visto questo comportamento su alcuni siti (se utilizzate browser con riempimento automatico) -- i campi della login/password non vengono riempiti immediatamente, ma c'è un delay(ritardo) finchè la pagina non è completamente caricata. Questo è in realtà il ritardo fino all'evento `DOMContentLoaded`.
106+
Se l'evento `DOMContentLoaded` viene rinviato a causa dei lunghi tempi di caricamento degli script, allora anche il riempimento automatico dovrà attendere. Probabilmente avrete visto questo comportamento su alcuni siti (se utilizzate browser con riempimento automatico) -- i campi della login/password non vengono riempiti immediatamente, ma c'è un delay(ritardo) finché la pagina non è completamente caricata. Questo è in realtà il ritardo dovuto all'evento `DOMContentLoaded`.
107107

108108

109109
## window.onload [#window-onload]
110110

111-
L'evento `load` sull'oggetto `window` scatta quando tutta la pagina è stata caricata, inclusi gli stili, immagini e altre risorse.
111+
L'evento `load` sull'oggetto `window` viene emesso quando tutta la pagina è stata caricata, inclusi gli stili, immagini e altre risorse.
112112

113-
L'esempio sotto mostra correttamente le dimensioni dell'immagine, perchè `window.onload` aspetta il caricamento di tutte le immagini:
113+
L'esempio sotto mostra correttamente le dimensioni dell'immagine, perché `window.onload` aspetta il caricamento di tutte le immagini:
114114

115115
```html run height=200 refresh
116116
<script>
117-
window.onload = function() { // same as window.addEventListener('load', (event) => {
117+
window.onload = function() { // equivale window.addEventListener('load', (event) => {
118118
alert('Page loaded');
119119
120120
// l'immagine è già caricata in questo momento
@@ -127,7 +127,7 @@ L'esempio sotto mostra correttamente le dimensioni dell'immagine, perchè `windo
127127

128128
## window.onunload
129129

130-
Quando un utente lascia la pagina viene triggerato l'evento `unload` sulla `window`. Possiamo effettuare operazioni che non comportano un ritardo, come chiudere le finistre popup relative alla pagina.
130+
Quando un utente lascia la pagina viene emesso l'evento `unload` sulla `window`. Possiamo effettuare operazioni che non comportano un ritardo, come chiudere le finestre popup relative alla pagina.
131131

132132
L'eccezione degna di nota è mandare dati analitici riguardo la pagina.
133133

@@ -148,10 +148,10 @@ window.addEventListener("unload", function() {
148148
```
149149

150150
- La richiesta è effettuata come POST.
151-
- We can send not only a string, but also forms and other formats, as described in the chapter <info:fetch>, but usually it's a stringified object. Non possiamo mandare solo dati di tipo string ma anche form e altri formati, come descritto nel capitolo <info:fetch>, ma di solito è un oggetto sotto forma di stringa.
151+
- Non siamo limitati all'invio di sole stringhe, ma sono supportati anche `Form` ed altri formati, come descritto nel capitolo <info:fetch>, anche se solitamente si invia un oggetto sotto forma di stringa.
152152
- La dimensione massima dei dati è 64kb.
153153

154-
Quando la richiesta `sendBeacon` è terminata il browser probabilmente ha già lasciato il document e quindi non c'è modo di ottenere la risposta del server (che comunque di solito è vuota per i dati analitici).
154+
Quando la richiesta `sendBeacon` è terminata il browser probabilmente ha già lasciato il document e quindi non c'è modo di ottenere la risposta del server (che comunque di solito è vuota per i dati analitici).
155155

156156
C'è anche un flag `keepalive` per effettuare richieste dopo che la pagina è stata lasciata. Potrai trovare maggiore informazioni nel capitolo <info:fetch-api>.
157157

@@ -160,11 +160,11 @@ Se vogliamo cancellare il passaggio ad un'altra pagina non possiamo farlo qui ma
160160

161161
## window.onbeforeunload [#window.onbeforeunload]
162162

163-
Se un utente sta cambiando pagina o sta cercando di chiudere la finestra, l'handler dell'evento `beforeunload` chiede una conferma aggiuntiva.
163+
Se un utente sta cambiando pagina o sta cercando di chiudere la finestra, il gestore dell'evento `beforeunload` chiede una conferma aggiuntiva.
164164

165165
Se cancelliamo l'evento il browser potrebbe chiedere all'utente se confermano l'operazione.
166166

167-
Puoi provare questo comportamento mandando in esecezione questo codice e poi ricaricando la pagina:
167+
Puoi provare questo comportamento eseguendo questo codice e poi ricaricando la pagina:
168168

169169
```js run
170170
window.onbeforeunload = function() {
@@ -174,23 +174,23 @@ window.onbeforeunload = function() {
174174

175175
Per ragioni storiche, anche tornare una stringa non vuota conta come cancellazione dell'evento. Poco tempo fa i browser lo mostravano come un messaggio ma come dicono le [specifiche moderne](https://html.spec.whatwg.org/#unloading-documents), non dovrebbero.
176176

177-
Here's an example:
177+
Qui vediamo un esempio:
178178

179179
```js run
180180
window.onbeforeunload = function() {
181181
return "There are unsaved changes. Leave now?";
182182
};
183183
```
184184

185-
Il comportamento è stato cambiato perchè alcuni webmaster abusavano di questo evento mostrando messaggi fastidiosi e fuorvianti. Quindi ora i vecchi browser potrebbero mostrare ancora questi messaggi, ma a parte questo -- non c'è modo di customizzare il messaggio che viene mostrato all'utente.
185+
Il comportamento è stato cambiato perché alcuni webmaster abusavano di questo evento mostrando messaggi fastidiosi e fuorvianti. Quindi ora i vecchi browser potrebbero mostrare ancora questi messaggi, ma a parte questo -- non c'è modo di personalizzare il messaggio che viene mostrato all'utente.
186186

187187
## readyState
188188

189-
Cosa succede se impostiamo l'handler dell'evento `DOMContentLoaded` dopo che il documento è stato caricato?
189+
Cosa succede se impostiamo il gestore dell'evento `DOMContentLoaded` dopo che il documento è stato caricato?
190190

191-
Naturalmente, non viene mai eseguito.
191+
Naturalmente, non verrà mai eseguito.
192192

193-
Ci sono dei casi in cui non siamo sicuri se il document è stato caricato o meno. Vorremmo che la nostra funzione fosse eseguita quando il DOM è stato caricato, sia adesso che dopo.
193+
Ci sono dei casi in cui non siamo sicuri se il document è stato caricato o meno. Vorremmo che la nostra funzione venisse eseguita quando il DOM è stato caricato, sia adesso che dopo.
194194

195195
La proprietà `document.readyState` ci da informazioni a proposito dello stato di caricamento corrente.
196196

@@ -216,7 +216,7 @@ if (document.readyState == 'loading') {
216216
}
217217
```
218218

219-
C'è anche l'evento `readystatechange` che scatta quando lo stato cambia, quindi possiamo stampare tutti questi stati in questo modo:
219+
Abbiamo a disposizione anche l'evento `readystatechange` che viene emesso quando lo stato cambia, quindi possiamo stampare il cambiamento di questi stati, come nell'esempio:
220220

221221
```js run
222222
// stato corrente
@@ -230,7 +230,7 @@ L'evento `readystatechange` è un meccanismo alternativo per il tracciamento del
230230

231231
Vediamo il flusso di tutti gli eventi per completezza.
232232

233-
Ecco un documento con `<iframe>`, `<img>` e handler che loggano gli eventi:
233+
Ecco un documento con `<iframe>`, `<img>` e handler che mostra gli eventi:
234234

235235
```html
236236
<script>
@@ -272,11 +272,11 @@ I numeri tra le parentesi quadre indicano il tempo approssimativo di quando l'ev
272272
Eventi di caricamento della pagina:
273273

274274
- l'evento `DOMContentLoaded` scatta sul `document` quando il DOM è pronto. Possiamo quindi utilizzare Javascript sugli elementi della pagina in questa fase.
275-
- Script come `<script>...</script>` o `<script src="..."></script>` bloccano DOMContentLoaded poichè il browser aspetta che finiscano di caricarsi per eseguirlo.
275+
- Script come `<script>...</script>` o `<script src="..."></script>` bloccano DOMContentLoaded poiché il browser aspetta che finiscano di caricarsi per eseguirlo.
276276
- Immagini e altre risorse potrebbero prolungare ulteriormente il caricamento.
277-
- l'evento `load` sulla `window` si aziona quando la pagina e tutte le risorse sono caricate. Viene usato raramente perchè di solito non c'è bisogno di attendere per così tanto.
277+
- l'evento `load` sulla `window` si aziona quando la pagina e tutte le risorse sono caricate. Viene usato raramente perché di solito non c'è bisogno di attendere per così tanto.
278278
- l'evento `beforeunload` sulla `window` si aziona quando l'utente vuole lasciare la pagina. Se cancelliamo l'evento il browser chiede all'utente se vuole veramente lasciare la pagina (per esempio se ci sono modifiche non salvate).
279-
- l'evento `unload` sulla `window` si aziona quando l'utente sta proprio lasciando la pagina, nell'handler possiamo solo effettuare operazioni semplici che non comportano nessun ritardo o chiedere cose all'utente. Vista questa limitazione, viene usato raramente. Possiamo mandare richieste di rete con `navigator.sendBeacon`.
279+
- l'evento `unload` sulla `window` si aziona quando l'utente sta proprio lasciando la pagina, nelil gestore possiamo solo effettuare operazioni semplici che non comportano nessun ritardo o chiedere cose all'utente. Vista questa limitazione, viene usato raramente. Possiamo mandare richieste di rete con `navigator.sendBeacon`.
280280
- `document.readyState` è lo stato corrente del documento, i cambi possono essere tracciati nell'evento `readystatechange`:
281281
- `loading` -- il document si sta caricando.
282282
- `interactive` -- il document è parsato, si verifica quasi allo stesso tempo di `DOMContentLoaded`, ma prima di esso.

2-ui/5-loading/01-onload-ondomcontentloaded/readystate.view/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<meta charset="utf-8">
55
</head>
66
<body>
7-
<!-- the sequence should be like this:
7+
<!-- la sequenza dovrebbe essere simile a:
88
[10] initial readyState:loading
99
[20] readyState:interactive
1010
[21] DOMContentLoaded

0 commit comments

Comments
 (0)