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
Copy file name to clipboardExpand all lines: 3-frames-and-windows/01-popup-windows/article.md
+47-47Lines changed: 47 additions & 47 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,15 +13,15 @@ Le finestre a popup esistono da molto tempo. Lo scopo iniziale era quello di uti
13
13
14
14
Inoltre, i popup possono essere ingannevoli su dispositivi mobile, poiché non verranno mostrare più finestra contemporaneamente.
15
15
16
-
Ciònonostante, esistono alcune applicazioni in cui i popup sono ancora utilizzati, e.g. per il login OAuth (login con Google/Facebook/...), perché:
16
+
Ciononostante, esistono alcune applicazioni in cui i popup sono ancora utilizzati, e.g. per il login OAuth (login con Google/Facebook/...), perché:
17
17
18
18
1. Un popup è una finestra separata con un suo ambiente JavaScript separato. Quindi l'apertura di un popup da un sito di terze parti, che potrebbe non essere affidabile, è un operazione sicura.
19
19
2. E' molto semplice aprire un popup.
20
20
3. Un popup può navigare (cambiare URL) ed inviare messaggi alla finestra che lo ha generato.
21
21
22
22
## Blocco dei popup
23
23
24
-
In passato, i siti con scopi maligni, abusavano dei popup. Una pagina con pessimi intenti, poteva aprire decine di finestre di ads. Per questo motivo, molti browser moderni tendono a bloccare le finestere di popup, per proteggere gli utenti.
24
+
In passato, i siti con scopi maligni, abusavano dei popup. Una pagina con pessimi intenti, poteva aprire decine di finestre di ads. Per questo motivo, molti browser moderni tendono a bloccare le finestre di popup, per proteggere gli utenti.
25
25
26
26
**Molti browser bloccano i popup se questi vengono invocati da eventi non generati da utente. Un evento permesso è quello di `onclick`.**
27
27
@@ -56,7 +56,7 @@ Il popup si apre in Chrome, ma viene bloccato in Firefox.
La differenza sta nel fatto che Firefox tratta un timeout di 2000ms, o inferiore, come accettabile, qualsiasi valore che sia superiore verrà trattato come "inaffidabile", assumendo che un tale tiemeout is "fuori dall'azione dell'utente". Quindi nel primo caso il popup viene bloccato, mentre nel secondo no.
59
+
La differenza sta nel fatto che Firefox tratta un timeout di 2000ms, o inferiore, come accettabile, qualsiasi valore che sia superiore verrà trattato come "inaffidabile", assumendo che un tale timeout sia "fuori dall'azione dell'utente". Quindi nel primo caso il popup viene bloccato, mentre nel secondo no.
60
60
61
61
## window.open
62
62
@@ -116,11 +116,11 @@ Le regole applicate per le impostazioni omesse sono:
116
116
- Se non viene fornito il terzo argomento alla funzione `open`, oppure è vuoto, allora vengono utilizzati i parametri di default della finestra.
117
117
- Se viene fornita una stringa di parametri, ma vengono omesse proprietà di tipo `si/no`, allora verranno impostate di default a `no`. Quindi nel caso in cui forniste dei parametri, assicuratevi di impostarli esplicitamente a `yes`.
118
118
- Se non vengono forniti i parametri `left/top`, allora il browser aprirà la nuova finestra vicino all'ultima aperta.
119
-
- Se non vengono forniti i parametri `width/height`, allora il browser aprirà la nuova finestra con la stessa diemensione dell'ultima aperta.
119
+
- Se non vengono forniti i parametri `width/height`, allora il browser aprirà la nuova finestra con la stessa dimensione dell'ultima aperta.
120
120
121
121
## Accedere al popup dalla finestra
122
122
123
-
L'invocazione di `open` torna un riferimento alla finestra appena aperta. Può quindi essereu utilizzato per manipolarne le proprietà, cambiarne la posizione e molto altro.
123
+
L'invocazione di `open` torna un riferimento alla finestra appena aperta. Può quindi essere utilizzato per manipolarne le proprietà, cambiarne la posizione e molto altro.
124
124
125
125
In questo esempio, generiamo del contenuto per il popup tramite JavaScript:
Da notare: nel momento immediatamente successivo a `window.open`, la nuova finestra non è ancora stata caricata. Lo abbiamo dimostrato tramite `alert` in riga `(*)`. Quindi dovremo attendere l'evento `onload`, prima di poter effetuare modifiche. Possiamo utilizzare anche l'handler `DOMContentLoaded` per `newWin.document`.
149
+
Da notare: nel momento immediatamente successivo a `window.open`, la nuova finestra non è ancora stata caricata. Lo abbiamo dimostrato tramite `alert` in riga `(*)`. Quindi dovremo attendere l'evento `onload`, prima di poter effettuare modifiche. Possiamo utilizzare anche l'handler `DOMContentLoaded` per `newWin.document`.
150
150
151
151
```warn header="Politica della stessa origine"
152
152
Le finestre possono accedere liberamente al contenuto delle altre, ma solamente se queste appartengono alla stessa origine (lo stesso protocol://domain:port).
@@ -176,7 +176,7 @@ Per chiudere una finestra di popup, possiamo utilizzare: `win.close()`.
176
176
177
177
Invece, per verificare se una finestra è chiusa possiamo utilizzare: `win.closed`.
178
178
179
-
Tecnicamente, il metodo `close()` è disponibile su tutte le finestre, ma nella pratica, `window.close()` viene ignorato dalla maggior parte dei browser se la finestra non è stata creata tramite un comando esplicito di `window.open()`. Quindi fuzionerà solamente con le finestre a popup.
179
+
Tecnicamente, il metodo `close()` è disponibile su tutte le finestre, ma nella pratica, `window.close()` viene ignorato dalla maggior parte dei browser se la finestra non è stata creata tramite un comando esplicito di `window.open()`. Quindi funzionerà solamente con le finestre a popup.
180
180
181
181
La proprietà `closed` vale `true` se la finestra è chiusa. Questa risulta essere molto utile per verificare se il popup (oppure la finestra principale) è ancora aperto. Un utente potrebbe chiudere la finestra di popup in qualsiasi istante, ed il nostro codice dovrà essere pronto a gestire tale eventualità.
Abbiamo a disposizione metodi per il riposizionamento/ridimensionamente di una finestra:
197
197
198
198
`win.moveBy(x,y)`
199
-
: Move the window relative to current position `x` pixels to the right and `y` pixels down. Negative values are allowed (to move left/up).
199
+
: Muove la finestra rispetto alla posizione attuale, di `x` pixels a destra e `y` pixels verso il basso. Sono ammessi anche i valori negativi (per spostare a sinistra o verso l'alto).
200
200
201
201
`win.moveTo(x,y)`
202
-
: Move the window to coordinates`(x,y)`on the screen.
202
+
: Posiziona la finestra alle coordinate`(x,y)`sullo schermo.
203
203
204
204
`win.resizeBy(width,height)`
205
-
: Resize the window by given`width/height`relative to the current size. Negative values are allowed.
205
+
: Ridimensiona la finestra secondo i`width/height`forniti, rispetto alla dimensione attuale. Sono ammessi anche i valori negativi.
206
206
207
207
`win.resizeTo(width,height)`
208
-
: Resize the window to the given size.
208
+
: Ridimensiona la finestra secondo le dimensioni fornite.
209
209
210
-
There's also `window.onresize` event.
210
+
Abbiamo a disposizione anche l'evento `window.onresize`.
211
211
212
-
```warn header="Only popups"
213
-
To prevent abuse, the browser usually blocks these methods. They only work reliably on popups that we opened, that have no additional tabs.
212
+
```warn header="Solamente i popup"
213
+
Per prevenire qualsiasi abuso di queste funzionalità, il browser solitamente blocca questi metodi. Questi infatti funzioneranno come atteso solamente con le finestre di popup che apriremo, le quali non hanno altre tab.
214
214
```
215
215
216
-
```warn header="No minification/maximization"
217
-
JavaScript has no way to minify or maximize a window. These OS-level functions are hidden from Frontend-developers.
216
+
```warn header="Non è possibile miniaturizzare/massimizzare"
217
+
JavaScript non ha la possibilità di miniaturizzare o massimizzare una finestra. Queste funzionalità a livello di OS (Sistema Operativo) sono nascoste agli sviluppatori frontend.
218
218
219
-
Move/resize methods do not work for maximized/minimized windows.
219
+
I metodi di riposizionamento e ridimensionamento non hanno alcun effetto su finestre miniaturizzate o massimizzate.
220
220
```
221
221
222
-
## Scrolling a window
222
+
## Scorrere all'interno di una finestra
223
223
224
-
We already talked about scrolling a window in the chapter<info:size-and-scroll-window>.
224
+
Abbiamo già affrontato l'argomento relativo allo scorrimento all'interno delle finestre nel capitolo<info:size-and-scroll-window>.
225
225
226
226
`win.scrollBy(x,y)`
227
-
: Scroll the window `x` pixels right and `y`down relative the current scroll. Negative values are allowed.
227
+
: Scorre la finestra di `x` pixels a destra e `y`pixels verso il basso, rispetto alla posizione attuale. Sono ammessi anche valori negativi.
228
228
229
229
`win.scrollTo(x,y)`
230
-
: Scroll the window to the given coordinates`(x,y)`.
230
+
: Scorre la finestra alle coordinate fornite`(x,y)`.
231
231
232
232
`elem.scrollIntoView(top = true)`
233
-
: Scroll the window to make `elem`show up at the top (the default) or at the bottom for`elem.scrollIntoView(false)`.
233
+
: Scorre la finestra fino a rendere `elem`visibile all'inizio della finestra (comportamento di default) o a fondo finestra con`elem.scrollIntoView(false)`.
234
234
235
-
There's also `window.onscroll` event.
235
+
Abbiamo a disposizione anche l'evento `window.onscroll`.
236
236
237
-
## Focus/blur on a window
237
+
## Focus/blur su una finestra
238
238
239
-
Theoretically, there are `window.focus()`and`window.blur()`methods to focus/unfocus on a window. And there are also`focus/blur`events that allow to catch the moment when the visitor focuses on a window and switches elsewhere.
239
+
Teoricamente, avremmo a disposizione i metodi `window.focus()`e`window.blur()`per innescare il focus/unfocus su una finestra. E anche gli eventi`focus/blur`che ci permettono di verificare il momento in cui un utente entra in una finestra(focus) o la abbandona(blur).
240
240
241
-
Although, in practice they are severely limited, because in the past evil pages abused them.
241
+
Anche se nella pratica questi metodi sono fortemente limitati, perché in passato pagine con scopi malevoli ne hanno abusato.
242
242
243
-
For instance, look at this code:
243
+
Ad esempio, date un'occhiata al seguente codice:
244
244
245
245
```js run
246
246
window.onblur= () =>window.focus();
247
247
```
248
248
249
-
When a user attempts to switch out of the window (`window.onblur`), it brings the window back into focus. The intention is to "lock" the user within the `window`.
249
+
Quando un utente tenta di abbandonare la finestra (`window.onblur`), questo riporta la finestra in focus. Lo scopo è quello di bloccare l'utente all'interno della finestra.
250
250
251
-
So browsers had to introduce many limitations to forbid the code like that and protect the user from ads and evils pages. They depend on the browser.
251
+
Quindi i browser hanno dovuto introdurre molte limitazioni per evitare codici come quello appena visto e proteggere l'utente da pubblicità e pagine malevole. Queste limitazioni so diverse di browser in browser.
252
252
253
-
For instance, a mobile browser usually ignores`window.focus()` completely. Also focusing doesn't work when a popup opens in a separate tab rather than a new window.
253
+
Ad esempio, un browser mobile solitamente ignora completamente`window.focus()`. Inoltre il focus, non funziona nemmeno quando apriamo il popup in una nuova tab piuttosto che in una nuova finestra.
254
254
255
-
Still, there are some use cases when such calls do work and can be useful.
255
+
Esistono però situazioni in cui l'utilizzo del focus è permesso e può tornare utile.
256
256
257
-
For instance:
257
+
Ad esempio:
258
258
259
-
-When we open a popup, it's might be a good idea to run a `newWindow.focus()` on it. Just in case, for some OS/browser combinations it ensures that the user is in the new window now.
260
-
-If we want to track when a visitor actually uses our web-app, we can track `window.onfocus/onblur`. That allows us to suspend/resume in-page activities, animations etc. But please note that the `blur`event means that the visitor switched out from the window, but they still may observe it. The window is in the background, but still may be visible.
259
+
-Quando apriamo un popup, potrebbe essere una buona idea, invocare `newWindow.focus()`. In questo caso, su alcune combinazioni di OS/browser potrebbe funzionare ed assicurarci che l'utente si trovi nella nuova finestra.
260
+
-Se vogliamo tracciare quando un utente utilizza la nostra webapp, possiamo osservare gli eventi `window.onfocus/onblur`. Questo ci consente di sospendere/riprendere alcune azioni, come le animazioni. Da notare però che, l'evento di `blur`sta a significare che l'utente è uscito dal contesto della finestra, ma potrebbe continuare ad osservarla. La finestra è in background, ma potrebbe essere ancora visibile.
261
261
262
-
## Summary
262
+
## Riepilogo
263
263
264
-
Popup windows are used rarely, as there are alternatives: loading and displaying information in-page, or in iframe.
264
+
Le finestre di popup vengono utilizzate raramente, ad oggi esistono diverse alternative: caricare e mostrare informazioni direttamete in pagina, oppure utilizzare un iframe.
265
265
266
-
If we're going to open a popup, a good practice is to inform the user about it. An "opening window" icon near a link or button would allow the visitor to survive the focus shift and keep both windows in mind.
266
+
Se la nostra intenzione è quella di aprire una finestra a popup, una buona pratica è di informare prima l'utente. Un icona di "apertura nuova finestra" vicino al link o al bottone può aiutare l'utente a "sopravvivere" al cambio contesto, mantentendo a mente entrambe le finestre.
267
267
268
-
-A popup can be opened by the `open(url, name, params)` call. It returns the reference to the newly opened window.
269
-
-Browsers block `open`calls from the code outside of user actions. Usually a notification appears, so that a user may allow them.
270
-
-Browsers open a new tab by default, but if sizes are provided, then it'll be a popup window.
271
-
-The popup may access the opener window using the `window.opener` property.
272
-
-The main window and the popup can freely read and modify each other if they have the same origin. Otherwise, they can change location of each other and [exchange messages](info:cross-window-communication).
268
+
-Una finestra di popup può essere aperto con l'invocazione di `open(url, name, params)`. Questa tornerà il riferimento alla nuova pagina aperta.
269
+
-I browser bloccano il metodo `open`se non invocato da un'azione diretta dell'utente. Solitamente, viene mostrata una notifica, in modo che l'utente possa rifiutare/acconsentire.
270
+
-I browser di default aprono una nuova tab, ma se vengono fornite delle dimensioni, allora verrà aperta una nuova finestra.
271
+
-La finestra di popup può accedere alla finestra che l'ha aperte tramite la proprietà `window.opener`.
272
+
-La finestra principale e quella di popup possono interagire liberamente, se queste appartengono alla stessa origine. Altrimenti, possono solamente modificarne la posizione e [scambiarsi messaggi](info:cross-window-communication).
273
273
274
-
To close the popup: use `close()` call. Also the user may close them (just like any other windows). The `window.closed`is `true` after that.
274
+
Per chiudere un popup: utilizziamo il metodo `close()`. Anche l'utente può chiuderlo manualmente (come qualsiasi altra finestra). La proprietà `window.closed`assumerà il valore `true`, dopo la chiusura della finestra.
275
275
276
-
-Methods `focus()`and`blur()`allow to focus/unfocus a window. But they don't work all the time.
277
-
-Events `focus`and`blur`allow to track switching in and out of the window. But please note that a window may still be visible even in the background state, after `blur`.
276
+
-I metodi `focus()`e`blur()`permettono di innescare focus/unfocus su una finestra. Ma non funzionano in tutti i casi.
277
+
-Gli eventi `focus`e`blur`consentono di tracciare i cambi di contesto di una finestra. Ma tenete a mente che una finestra, dopo l'evento di `blur`, potrebbe continuare ad essere visibile anche se si trova in background.
0 commit comments