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: 2-ui/5-loading/03-onload-onerror/1-load-img-callback/task.md
+10-10Lines changed: 10 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,22 +2,22 @@ importance: 4
2
2
3
3
---
4
4
5
-
# Load images with a callback
5
+
# Charger des images avec une fonction de rappel
6
6
7
-
Normally, images are loaded when they are created. So when we add`<img>`to the page, the user does not see the picture immediately. The browser needs to load it first.
7
+
Normalement, les images sont chargées lors de leur création. Ainsi, lorsque nous ajoutons`<img>`à la page, l'utilisateur ne voit pas l'image immédiatement. Le navigateur doit d'abord le charger.
8
8
9
-
To show an image immediately, we can create it "in advance", like this:
9
+
Pour afficher une image immédiatement, nous pouvons la créer "à l'avance", comme ceci:
10
10
11
11
```js
12
12
let img =document.createElement('img');
13
13
img.src='my.jpg';
14
14
```
15
15
16
-
The browser starts loading the image and remembers it in the cache. Later, when the same image appears in the document (no matter how), it shows up immediately.
16
+
Le navigateur commence à charger l'image et s'en souvient dans le cache. Plus tard, lorsque la même image apparaît dans le document (peu importe comment), elle apparaît immédiatement.
17
17
18
-
**Create a function`preloadImages(sources, callback)`that loads all images from the array `sources`and, when ready, runs`callback`.**
18
+
**Créez une fonction`preloadImages(sources, callback)`qui charge toutes les images du tableau `sources`et, une fois prête, exécute`callback`.**
19
19
20
-
For instance, this will show an `alert`after the images are loaded:
20
+
Par exemple, cela affichera `alert`après le chargement des images:
In case of an error, the function should still assume the picture "loaded".
30
+
En cas d'erreur, la fonction doit toujours supposer que l'image est "chargée".
31
31
32
-
In other words, the`callback`is executed when all images are either loaded or errored out.
32
+
En d'autres termes, le`callback`est exécuté lorsque toutes les images sont chargées ou en erreur.
33
33
34
-
The function is useful, for instance, when we plan to show a gallery with many scrollable images, and want to be sure that all images are loaded.
34
+
La fonction est utile, par exemple, lorsque nous prévoyons d'afficher une galerie avec de nombreuses images déroulantes et que nous voulons être sûrs que toutes les images sont chargées.
35
35
36
-
In the source document you can find links to test images, and also the code to check whether they are loaded or not. It should output`300`.
36
+
Dans le document source, vous pouvez trouver des liens vers des images de test, ainsi que le code pour vérifier si elles sont chargées ou non. Il devrait afficher`300`.
The browser allows us to track the loading of external resources -- scripts, iframes, pictures and so on.
3
+
Le navigateur nous permet de suivre le chargement des ressources externes - scripts, iframes, images, etc.
4
4
5
-
There are two events for it:
5
+
Il y a deux événements pour cela:
6
6
7
-
-`onload` -- successful load,
8
-
-`onerror` -- an error occurred.
7
+
-`onload` - chargement réussi,
8
+
-`onerror` - une erreur s'est produite.
9
9
10
-
## Loading a script
10
+
## Chargement d'un script
11
11
12
-
Let's say we need to load a third-party script and call a function that resides there.
12
+
Disons que nous devons charger un script tiers et appeler une fonction qui y réside.
13
13
14
-
We can load it dynamically, like this:
14
+
Nous pouvons le charger dynamiquement, comme ceci:
15
15
16
16
```js
17
17
let script =document.createElement('script');
@@ -20,68 +20,69 @@ script.src = "my.js";
20
20
document.head.append(script);
21
21
```
22
22
23
-
...But how to run the function that is declared inside that script? We need to wait until the script loads, and only then we can call it.
23
+
...Mais comment exécuter la fonction déclarée dans ce script? Nous devons attendre que le script se charge pour l'appeler.
24
24
25
25
```smart
26
-
For our own scripts we could use [JavaScript modules](info:modules) here, but they are not widely adopted by third-party libraries.
26
+
Pour nos propres scripts, nous pourrions utiliser des [modules JavaScript] (info:modules) ici, mais ils ne sont pas largement adoptés par les bibliothèques tierces.
27
27
```
28
28
29
29
### script.onload
30
30
31
-
The main helper is the `load` event. It triggers after the script was loaded and executed.
31
+
L'assistant principal est l'événement `load`. Il se déclenche après le chargement et l'exécution du script.
32
32
33
-
For instance:
33
+
Par exemple:
34
34
35
35
```js run untrusted
36
36
let script =document.createElement('script');
37
37
38
-
//can load any script, from any domain
38
+
//peut charger n'importe quel script, depuis n'importe quel domaine
alert("Error loading "+this.src); //Erreur de chargement de https://example.com/404.js
68
69
};
69
70
*/!*
70
71
```
71
72
72
-
Please note that we can't get HTTP error details here. We don't know if it was an error 404 or 500 or something else. Just that the loading failed.
73
+
Veuillez noter que nous ne pouvons pas obtenir les détails des erreurs HTTP ici. Nous ne savons pas si c'était une erreur 404 ou 500 ou autre chose. Juste que le chargement a échoué.
73
74
74
75
```warn
75
-
Events `onload`/`onerror` track only the loading itself.
76
+
Les événements `onload`/`onerror` ne suivent que le chargement lui-même.
76
77
77
-
Errors that may occur during script processing and execution are out of scope for these events. That is: if a script loaded successfully, then `onload` triggers, even if it has programming errors in it. To track script errors, one can use `window.onerror` global handler.
78
+
Les erreurs qui peuvent survenir lors du traitement et de l'exécution du script sont hors de portée de ces événements. C'est-à-dire: si un script s'est chargé avec succès, alors `onload` se déclenche, même s'il contient des erreurs de programmation. Pour suivre les erreurs de script, on peut utiliser le gestionnaire global `window.onerror`.
78
79
```
79
80
80
-
## Other resources
81
+
## Autres ressources
81
82
82
-
The `load`and`error`events also work for other resources, basically for any resource that has an external `src`.
83
+
Les événements `load`et`error`fonctionnent aussi pour d'autres ressources, essentiellement pour toute ressource qui a un `src` externe.
83
84
84
-
For example:
85
+
Par exemple:
85
86
86
87
```js run
87
88
let img =document.createElement('img');
@@ -96,30 +97,31 @@ img.onerror = function() {
96
97
};
97
98
```
98
99
99
-
There are some notes though:
100
+
Il y a quelques notes cependant:
101
+
102
+
- La plupart des ressources commencent à se charger lorsqu'elles sont ajoutées au document. Mais `<img>` est une exception. Elle commence à se charger lorsqu'elle obtient un src `(*)`.
103
+
- Pour `<iframe>`, l'événement `iframe.onload` se déclenche lorsque le chargement de l'iframe est terminé, à la fois pour un chargement réussi et en cas d'erreur.
100
104
101
-
- Most resources start loading when they are added to the document. But `<img>` is an exception. It starts loading when it gets a src `(*)`.
102
-
- For `<iframe>`, the `iframe.onload` event triggers when the iframe loading finished, both for successful load and in case of an error.
105
+
C'est pour des raisons historiques.
103
106
104
-
That's for historical reasons.
107
+
## Politique de crossorigin
105
108
106
-
## Crossorigin policy
109
+
Il y a une règle: les scripts d'un site ne peuvent pas accéder au contenu de l'autre site. Donc, par exemple un script sur `https://facebook.com` ne peut pas lire la boîte aux lettres de l'utilisateur sur `https://gmail.com`.
107
110
108
-
There's a rule: scripts from one site can't access contents of the other site. So, e.g. a script at `https://facebook.com` can't read the user's mailbox at `https://gmail.com`.
111
+
Ou, pour être plus précis, une origine (triplet domaine/port/protocole) ne peut pas accéder au contenu à partir d'une autre. Donc, même si nous avons un sous-domaine, ou juste un autre port, ce sont des origines différentes sans accès les uns aux autres.
109
112
110
-
Or, to be more precise, one origin (domain/port/protocol triplet) can't access the content from another one. So even if we have a subdomain, or just another port, these are different origins with no access to each other.
113
+
Cette règle affecte également les ressources d'autres domaines.
111
114
112
-
This rule also affects resources from other domains.
115
+
Si nous utilisons un script d'un autre domaine et qu'il contient une erreur, nous ne pouvons pas obtenir les détails de l'erreur.
113
116
114
-
If we're using a script from another domain, and there's an error in it, we can't get error details.
117
+
Par exemple, prenons un script `error.js` qui consiste en un seul (mauvais) appel de fonction:
115
118
116
-
For example, let's take a script `error.js` that consists of a single (bad) function call:
117
119
```js
118
120
// 📁 error.js
119
121
noSuchFunction();
120
122
```
121
123
122
-
Now load it from the same site where it's located:
124
+
Maintenant, chargez-le depuis le même site où il se trouve:
Details may vary depending on the browser, but the idea is the same: any information about the internals of a script, including error stack traces, is hidden. Exactly because it's from another domain.
160
+
Les détails peuvent varier en fonction du navigateur, mais l'idée est la même: toute information sur les éléments internes d'un script, y compris les traces de pile d'erreurs, est masquée. Exactement parce que c'est d'un autre domaine.
159
161
160
-
Why do we need error details?
162
+
Pourquoi avons-nous besoin de détails d'erreur?
161
163
162
-
There are many services (and we can build our own) that listen for global errors using `window.onerror`, save errors and provide an interface to access and analyze them. That's great, as we can see real errors, triggered by our users. But if a script comes from another origin, then there's not much information about errors in it, as we've just seen.
164
+
Il existe de nombreux services (et nous pouvons créer le nôtre) qui écoutent les erreurs globales en utilisant `window.onerror`, enregistrent les erreurs et fournissent une interface pour y accéder et les analyser. C'est génial, car nous pouvons voir de vraies erreurs, déclenchées par nos utilisateurs. Mais si un script vient d'une autre origine, alors il n'y a pas beaucoup d'informations sur les erreurs, comme nous venons de le voir.
163
165
164
-
Similar cross-origin policy (CORS) is enforced for other types of resources as well.
166
+
Une politique d’origine croisée similaire (CORS) est également appliquée pour d’autres types de ressources.
165
167
166
-
**To allow cross-origin access, the `<script>`tag needs to have the `crossorigin` attribute, plus the remote server must provide special headers.**
168
+
**Pour permettre l'accès cross-origin, la balise `<script>`doit avoir l'attribut `crossorigin`, et le serveur distant doit fournir des en-têtes spéciaux.**
2.**`crossorigin="anonymous"`** -- access allowed if the server responds with the header `Access-Control-Allow-Origin`with`*`or our origin. Browser does not send authorization information and cookies to remote server.
172
-
3.**`crossorigin="use-credentials"`** -- access allowed if the server sends back the header `Access-Control-Allow-Origin`with our origin and`Access-Control-Allow-Credentials:true`. Browser sends authorization information and cookies to remote server.
2.**`crossorigin="anonymous"`** -- accès autorisé si le serveur répond avec l'en-tête `Access-Control-Allow-Origin`avec`*`ou notre origine. Le navigateur n'envoie pas d'autorisationinformation and cookies to remote server.
174
+
3.**`crossorigin="use-credentials"`** -- accès autorisé si le serveur renvoie l'en-tête `Access-Control-Allow-Origin`avec notre origine et`Access-Control-Allow-Credentials:true`. Le navigateur envoie des informations d'autorisation et des cookies au serveur distant.
173
175
174
176
```smart
175
-
You can read more about cross-origin access in the chapter <info:fetch-crossorigin>. It describes the `fetch` method for network requests, but the policy is exactly the same.
177
+
Vous pouvez en savoir plus sur l'accès cross-origin dans le chapitre <info:fetch-crossorigin>. Il décrit la méthode `fetch` pour les requêtes réseau, mais la politique est exactement la même.
176
178
177
-
Such thing as "cookies" is out of our current scope, but you can read about them in the chapter <info:cookie>.
179
+
Les "cookies" sont hors de notre portée actuelle, mais vous pouvez les lire dans le chapitre <info:cookie>.
178
180
```
179
181
180
-
In our case, we didn't have any crossorigin attribute. So the cross-origin access was prohibited. Let's add it.
182
+
Dans notre cas, nous n'avions aucun attribut crossorigin. L'accès cross-origin était donc interdit. Ajoutons-le.
181
183
182
-
We can choose between`"anonymous"` (no cookies sent, one server-side header needed) and`"use-credentials"` (sends cookies too, two server-side headers needed).
184
+
Nous pouvons choisir entre`"anonymous"` (aucun cookie envoyé, un en-tête côté serveur nécessaire) et`"use-credentials"` (envoie également des cookies, deux en-têtes côté serveur nécessaires).
183
185
184
-
If we don't care about cookies, then`"anonymous"`is the way to go:
186
+
Si nous ne nous soucions pas des cookies, alors`"anonymous"`est la voie à suivre:
Now, assuming that the server provides an `Access-Control-Allow-Origin` header, everything's fine. We have the full error report.
197
+
Maintenant, en supposant que le serveur fournit un en-tête `Access-Control-Allow-Origin`, tout va bien. Nous avons le rapport d'erreur complet.
196
198
197
-
## Summary
199
+
## Résumé
198
200
199
-
Images `<img>`, external styles, scripts and other resources provide `load`and`error`events to track their loading:
201
+
Les images `<img>`, les styles externes, les scripts et autres ressources fournissent des événements `load`et`error`pour suivre leur chargement:
200
202
201
-
-`load`triggers on a successful load,
202
-
-`error`triggers on a failed load.
203
+
-`load`se déclenche en cas de chargement réussi.
204
+
-`error`se déclenche en cas d'échec du chargement.
203
205
204
-
The only exception is`<iframe>`: for historical reasons it always triggers `load`, for any load completion, even if the page is not found.
206
+
La seule exception est`<iframe>`: pour des raisons historiques, il déclenche toujours `load`, pour tout achèvement de chargement, même si la page n'est pas trouvée.
205
207
206
-
The`readystatechange`event also works for resources, but is rarely used, because `load/error`events are simpler.
208
+
L'événement`readystatechange`fonctionne également pour les ressources, mais est rarement utilisé, car les événements `load/error`sont plus simples.
0 commit comments