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
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ importance: 4
4
4
5
5
# Загрузите изображения с колбэком
6
6
7
-
Обычно изображения начинают загружаться в момент их создания. Когда мы добавляет`<img>` на страницу, пользователь не видит это изображение мгновенно. Браузер сначала должен его загрузить.
7
+
Обычно изображения начинают загружаться в момент их создания. Когда мы добавляем`<img>` на страницу, пользователь не увидит его тут же. Браузер сначала должен его загрузить.
8
8
9
9
Чтобы показать изображение сразу, мы можем создать его "заранее":
Copy file name to clipboardExpand all lines: 2-ui/5-loading/03-onload-onerror/article.md
+9-9Lines changed: 9 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -98,28 +98,28 @@ img.onerror = function() {
98
98
99
99
Однако есть некоторые особенности:
100
100
101
-
- Большинство ресурсов начинают загружаться после их добавления в document. За исключением `<img>`. Изображения начинают загружаться, только когда у них имеется атрибут src `(*)`.
101
+
- Большинство ресурсов начинают загружаться после их добавления в документ. За исключением тега `<img>`. Изображения начинают загружаться, когда получают `src (*)`.
102
102
- Для `<iframe>` событие `load` срабатывает по окончании загрузки как в случае успеха, так и в случае ошибки.
103
103
104
-
Такое поведение у `<iframe>`сложилось по историческим причинам.
104
+
Такое поведение сложилось по историческим причинам.
105
105
106
106
## Кросс-доменная политика
107
107
108
108
Есть правило: скрипты с одного сайта не могут получить доступ к содержимому другого сайта. Например, скрипт с `https://facebook.com` не может прочитать почту пользователя на `https://gmail.com`.
109
109
110
-
Или, если быть более точным, один источник (домен/порт/протокол) не может получить доступ к содержимому другого источника. Даже домен и поддомен, или просто другой порт, будут считаться разными источниками, не имеющими доступа друг к другу.
110
+
Или, если быть более точным, один источник (домен/порт/протокол) не может получить доступ к содержимому c другого источника. Даже поддомен или просто другой порт будут считаться разными источниками, не имеющими доступа друг к другу.
111
111
112
112
Это правило также касается ресурсов с других доменов.
113
113
114
114
Если мы используем скрипт с другого домена, и в нем имеется ошибка, мы не сможем узнать детали этой ошибки.
115
115
116
-
Для примера давайте возьмем скрипт с одним вызовом функции (которой не существует):
116
+
Для примера давайте возьмем мини-скрипт `error.js`, который состоит из одного-единственного вызова функции, которой не существует:
117
117
```js
118
118
// 📁 error.js
119
119
noSuchFunction();
120
120
```
121
121
122
-
Теперь загрузим этот скрипт с нашего домена:
122
+
Теперь загрузим этот скрипт с того же сайта, на котором он лежит:
123
123
124
124
```html run height=0
125
125
<script>
@@ -155,15 +155,15 @@ Script error.
155
155
, 0:0
156
156
```
157
157
158
-
Детали отчёта могут варьироваться в зависимости от браузера, но идея общая: любая информация о внутренностях скрипта спрятана. Именно потому, что скрипт загружен с другого домена.
158
+
Детали отчёта могут варьироваться в зависимости от браузера, но основная идея: любая информация о внутренностях скрипта, включая стек ошибки, спрятана. Именно потому, что скрипт загружен с другого домена.
159
159
160
-
Зачем нам могут быть нужны детали?
160
+
Зачем нам могут быть нужны детали ошибки?
161
161
162
-
Существует много сервисов (и мы можем сделать наш собственный), которые обрабатывают `window.onerror`, сохраняют отчёт на сервере и предоставляют доступ к этому отчёту для анализа. Это здорово, потому что мы можем увидеть реальные ошибки, которые случились у наших пользователей. Но мы не можем увидеть ошибки сторонних скриптов "напрямую".
162
+
Существует много сервисов (и мы можем сделать наш собственный), которые обрабатывают глобальные ошибки при помощи `window.onerror`, сохраняют отчёт о них и предоставляют доступ к этому отчёту для анализа. Это здорово, потому что мы можем увидеть реальные ошибки, которые случились у наших пользователей. Но если скрипт - с другого домена, то информации об ошибках в нём почти нет, как мы только что видели.
163
163
164
164
Похожая кросс-доменная политика (CORS) внедрена и в отношении других ресурсов.
165
165
166
-
**Чтобы разрешить кросс-доменный доступ, нам нужно воспользоваться атрибутом `crossorigin`, и, кроме того, удалённый сервер должен предоставить специальные заголовки.**
166
+
**Чтобы разрешить кросс-доменный доступ, нам нужно поставить тегу `<script>` атрибут `crossorigin`, и, кроме того, удалённый сервер должен поставить специальные заголовки.**
0 commit comments