Skip to content

Commit 7ef88fa

Browse files
authored
fix: correct cross-window-communication article.md ru
1 parent 670ccab commit 7ef88fa

File tree

1 file changed

+18
-18
lines changed
  • 3-frames-and-windows/03-cross-window-communication

1 file changed

+18
-18
lines changed

3-frames-and-windows/03-cross-window-communication/article.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
- Получения ссылки на внутренний объект `window` из `iframe.contentWindow`
8282
- Изменения `location`.
8383

84-
С другой стороны, если у ифрейма тот же источник, то с ним можно делать всё, что угодно:
84+
С другой стороны, если у ифрейма тот же источник, то с ним можно делать всё что угодно:
8585

8686
```html run
8787
<!-- ифрейм с того же сайта -->
@@ -96,9 +96,9 @@
9696
```
9797

9898
```smart header="`iframe.onload` и `iframe.contentWindow.onload`"
99-
Событие `iframe.onload` - по сути то же, что и `iframe.contentWindow.onload`. Оно сработает, когда встроенное окно полностью загрузится со всеми ресурсами.
99+
Обработчик события `load` в свойстве `iframe.onload` (на элементе `<iframe>`) - по сути то же, что и `iframe.contentWindow.onload` (на объекте `window` внутри `<iframe>`). Оба сработают, когда встроенное окно полностью загрузится со всеми ресурсами.
100100

101-
...Но `iframe.onload` всегда доступно извне ифрейма, в то время как доступ к `iframe.contentWindow.onload` разрешён только из окна с тем же источником.
101+
...Но свойство `iframe.onload` всегда доступно извне ифрейма, в то время как доступ к `iframe.contentWindow.onload` разрешён только из окна с тем же источником.
102102
```
103103
104104
## Окна на поддоменах: document.domain
@@ -256,7 +256,7 @@ if (window == top) { // текущий window == window.top?
256256

257257
### postMessage
258258

259-
Окно, которое хочет отправить сообщение, должно вызвать метод [postMessage](mdn:api/Window/postMessage) окна получателя. Другими словами, если мы хотим отправить сообщение в окно `win`, тогда нам следует вызвать `win.postMessage(data, targetOrigin)`.
259+
Окно, которое хочет отправить сообщение, должно вызвать метод [postMessage](mdn:api/Window/postMessage) окна-получателя. Другими словами, если мы хотим отправить сообщение в окно `targetWin`, тогда нам следует вызвать `targetWin.postMessage(data, targetOrigin)`.
260260

261261
Аргументы:
262262

@@ -266,19 +266,19 @@ if (window == top) { // текущий window == window.top?
266266
`targetOrigin`
267267
: Определяет источник для окна-получателя, только окно с данного источника имеет право получить сообщение.
268268

269-
Указание `targetOrigin` является мерой безопасности. Как мы помним, если окно (получатель) происходит из другого источника, мы из окна-отправителя не можем прочитать его `location`. Таким образом, мы не можем быть уверены, какой сайт открыт в заданном окне прямо сейчас: пользователь мог перейти куда-то, окно-отправитель не может это знать.
269+
Указание `targetOrigin` является мерой безопасности. Как мы помним, если окно-получатель происходит из другого источника, мы из окна-отправителя не можем прочитать его `location`. Таким образом, мы не можем быть уверены, какой сайт открыт в заданном окне прямо сейчас: пользователь мог перейти куда-то, окно-отправитель не может это знать.
270270

271271
Если указать `targetOrigin`, то мы можем быть уверены, что окно получит данные только в том случае, если в нём правильный сайт. Особенно это важно, если данные конфиденциальные.
272272

273-
Например, здесь `win` получит сообщения только в том случае, если в нём открыт документ из источника `http://example.com`:
273+
Например, здесь `targetWin` получит сообщения только в том случае, если в нём открыт документ из источника `http://example.com`:
274274

275275
```html no-beautify
276276
<iframe src="http://example.com" name="example">
277277

278278
<script>
279-
let win = window.frames.example;
279+
let targetWin = window.frames.example;
280280
281-
win.postMessage("message", "http://example.com");
281+
targetWin.postMessage("message", "http://example.com");
282282
</script>
283283
```
284284

@@ -288,18 +288,18 @@ if (window == top) { // текущий window == window.top?
288288
<iframe src="http://example.com" name="example">
289289

290290
<script>
291-
let win = window.frames.example;
291+
let targetWin = window.frames.example;
292292
293293
*!*
294-
win.postMessage("message", "*");
294+
targetWin.postMessage("message", "*");
295295
*/!*
296296
</script>
297297
```
298298

299299

300300
### Событие message
301301

302-
Чтобы получать сообщения, окно-получатель должно иметь обработчик события `message` (сообщение). Оно срабатывает, когда был вызван метод `postMessage` (и проверка `targetOrigin` пройдена успешно).
302+
Чтобы получать сообщения, окно-получатель должно иметь обработчик события `message` (сообщение). Оно происходит, когда был вызван метод `postMessage` (и проверка `targetOrigin` пройдена успешно).
303303

304304
Объект события имеет специфичные свойства:
305305

@@ -350,11 +350,11 @@ window.addEventListener("message", function(event) {
350350
- `window.parent`, `window.top` -- это ссылки на родительское окно и окно самого верхнего уровня,
351351
- `iframe.contentWindow` -- это объект `window` внутри тега `<iframe>`.
352352

353-
Если окна имеют одинаковый источник (протокол, домен, порт), то они могут делать друг с другом всё, что угодно.
353+
Если окна имеют одинаковый источник (протокол, домен, порт), то они могут делать друг с другом всё что угодно.
354354

355355
В противном случае возможны только следующие действия:
356-
- Изменение свойства location другого окна (доступ только на запись).
357-
- Отправить туда сообщение.
356+
- Изменение свойства `location` другого окна (доступ только на запись).
357+
- Отправка туда сообщения.
358358

359359
Исключения:
360360
- Окна, которые имеют общий домен второго уровня: `a.site.com` и `b.site.com`. Установка свойства `document.domain='site.com'` в обоих окнах переведёт их в состояние "Одинакового источника".
@@ -363,10 +363,10 @@ window.addEventListener("message", function(event) {
363363
Метод `postMessage` позволяет общаться двум окнам с любыми источниками:
364364

365365
1. Отправитель вызывает `targetWin.postMessage(data, targetOrigin)`.
366-
2. Если `targetOrigin` не `'*'`, тогда браузер проверяет имеет ли `targetWin` источник `targetOrigin`.
366+
2. Если `targetOrigin` не `'*'`, тогда браузер проверяет, имеет ли `targetWin` источник `targetOrigin`.
367367
3. Если это так, тогда `targetWin` вызывает событие `message` со специальными свойствами:
368-
- `origin` -- источник окна отправителя (например, `http://my.site.com`)
369-
- `source` -- ссылка на окно отправитель.
370-
- `data` -- данные, может быть объектом везде, кроме IE (в IE только строки).
368+
- `origin` -- источник окна-отправителя (например, `http://my.site.com`)
369+
- `source` -- ссылка на окно-отправитель.
370+
- `data` -- данные, может быть объектом везде, кроме IE, поддерживающего только строки.
371371

372372
В окне-получателе следует добавить обработчик для этого события с помощью метода `addEventListener`.

0 commit comments

Comments
 (0)