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/03-cross-window-communication/article.md
+18-18Lines changed: 18 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -81,7 +81,7 @@
81
81
- Получения ссылки на внутренний объект `window` из `iframe.contentWindow`
82
82
- Изменения `location`.
83
83
84
-
С другой стороны, если у ифрейма тот же источник, то с ним можно делать всё, что угодно:
84
+
С другой стороны, если у ифрейма тот же источник, то с ним можно делать всё что угодно:
85
85
86
86
```html run
87
87
<!-- ифрейм с того же сайта -->
@@ -96,9 +96,9 @@
96
96
```
97
97
98
98
```smart header="`iframe.onload` и `iframe.contentWindow.onload`"
99
-
Событие `iframe.onload` - по сути то же, что и `iframe.contentWindow.onload`. Оно сработает, когда встроенное окно полностью загрузится со всеми ресурсами.
99
+
Обработчик события `load` в свойстве `iframe.onload`(на элементе `<iframe>`) - по сути то же, что и `iframe.contentWindow.onload` (на объекте `window` внутри `<iframe>`). Оба сработают, когда встроенное окно полностью загрузится со всеми ресурсами.
100
100
101
-
...Но `iframe.onload` всегда доступно извне ифрейма, в то время как доступ к `iframe.contentWindow.onload` разрешён только из окна с тем же источником.
101
+
...Но свойство `iframe.onload` всегда доступно извне ифрейма, в то время как доступ к `iframe.contentWindow.onload` разрешён только из окна с тем же источником.
Окно, которое хочет отправить сообщение, должно вызвать метод [postMessage](mdn:api/Window/postMessage) окнаполучателя. Другими словами, если мы хотим отправить сообщение в окно `win`, тогда нам следует вызвать `win.postMessage(data, targetOrigin)`.
259
+
Окно, которое хочет отправить сообщение, должно вызвать метод [postMessage](mdn:api/Window/postMessage) окна-получателя. Другими словами, если мы хотим отправить сообщение в окно `targetWin`, тогда нам следует вызвать `targetWin.postMessage(data, targetOrigin)`.
: Определяет источник для окна-получателя, только окно с данного источника имеет право получить сообщение.
268
268
269
-
Указание `targetOrigin` является мерой безопасности. Как мы помним, если окно (получатель) происходит из другого источника, мы из окна-отправителя не можем прочитать его `location`. Таким образом, мы не можем быть уверены, какой сайт открыт в заданном окне прямо сейчас: пользователь мог перейти куда-то, окно-отправитель не может это знать.
269
+
Указание `targetOrigin` является мерой безопасности. Как мы помним, если окно-получатель происходит из другого источника, мы из окна-отправителя не можем прочитать его `location`. Таким образом, мы не можем быть уверены, какой сайт открыт в заданном окне прямо сейчас: пользователь мог перейти куда-то, окно-отправитель не может это знать.
270
270
271
271
Если указать `targetOrigin`, то мы можем быть уверены, что окно получит данные только в том случае, если в нём правильный сайт. Особенно это важно, если данные конфиденциальные.
272
272
273
-
Например, здесь `win` получит сообщения только в том случае, если в нём открыт документ из источника `http://example.com`:
273
+
Например, здесь `targetWin` получит сообщения только в том случае, если в нём открыт документ из источника `http://example.com`:
Чтобы получать сообщения, окно-получатель должно иметь обработчик события `message` (сообщение). Оно срабатывает, когда был вызван метод `postMessage` (и проверка `targetOrigin` пройдена успешно).
302
+
Чтобы получать сообщения, окно-получатель должно иметь обработчик события `message` (сообщение). Оно происходит, когда был вызван метод `postMessage` (и проверка `targetOrigin` пройдена успешно).
-`window.parent`, `window.top` -- это ссылки на родительское окно и окно самого верхнего уровня,
351
351
-`iframe.contentWindow` -- это объект `window` внутри тега `<iframe>`.
352
352
353
-
Если окна имеют одинаковый источник (протокол, домен, порт), то они могут делать друг с другом всё, что угодно.
353
+
Если окна имеют одинаковый источник (протокол, домен, порт), то они могут делать друг с другом всё что угодно.
354
354
355
355
В противном случае возможны только следующие действия:
356
-
- Изменение свойства location другого окна (доступ только на запись).
357
-
-Отправить туда сообщение.
356
+
- Изменение свойства `location` другого окна (доступ только на запись).
357
+
-Отправка туда сообщения.
358
358
359
359
Исключения:
360
360
- Окна, которые имеют общий домен второго уровня: `a.site.com` и `b.site.com`. Установка свойства `document.domain='site.com'` в обоих окнах переведёт их в состояние "Одинакового источника".
0 commit comments