JS властивість Window.parent


Загальний опис

parent - це властивість об'єкта Window в мові програмування JavaScript, яка надає посилання на батьківське вікно, яке вміщує поточне вікно браузера. Використовуючи цю властивість, можна отримати доступ до об'єкта батьківського вікна та взаємодіяти з його властивостями та методами.

Основна суть parent полягає у можливості навігації та спілкування між вкладеними вікнами або фреймами на веб-сторінці. Зазвичай це використовується в контексті вкладених фреймів, де фрейм може отримати доступ до свого батьківського вікна для обміну інформацією чи керування вмістом.

Щоб використовувати parent, можна використовувати наступний код. Нехай parentWindow буде змінною, яка отримує значення parent:

var parentWindow = window.parent;
console.log("Посилання на батьківське вікно: ", parentWindow);

У цьому прикладі ми використовуємо глобальний об'єкт window та його властивість parent. Отримане значення можна використовувати для подальшої роботи з батьківським вікном.

Застосування parent дозволяє створювати взаємодію між фреймами або вкладеними вікнами веб-сторінки. Наприклад, вікно або фрейм може використовувати parent для звернення до елементів або функцій у батьківському вікні.

У реальних сценаріях це може бути корисно, наприклад, при створенні складних інтерфейсів з використанням фреймів, де один фрейм може взаємодіяти з іншим через parent. Також, це може використовуватися для передачі даних або викликів між вкладеними вікнами.

автор: Bond

Загальний опис

Якщо сторінка відкрита сама по собі, parent дорівнює самому window. Саме на цьому будується найкоротша перевірка «чи я в рамці»: window !== window.parent.

І це важливо не лише з цікавості: клікджекінг — атака, коли зловмисник відкриває твій сайт у прозорому iframe поверх свого й ловить кліки користувача. Перевірка допомагає її помітити (хоч надійно захищає лише заголовок X-Frame-Options із боку сервера).

Дістатись до вмісту батька з іншого домену не можна — лише надіслати йому повідомлення через postMessage().

автор: NagarD

Порада

Застосовуйте parent для реалізації комунікації між різними компонентами веб-сайту. Використовуючи цю властивість, ви можете здійснювати взаємодію та синхронізацію між різними частинами вашого додатку.

автор: Bond
Порада

Враховуйте можливість використання parent для обміну даними між фреймами або вікнами. Ви можете передавати значення з одного контексту до іншого, забезпечуючи єдність функціоналу.

автор: Bond
Порада

Уникайте надмірного використання parent, оскільки це може призвести до втручання в інші частини коду. Використовуйте цю властивість обачно та лише там, де це дійсно необхідно для досягнення певного функціоналу.

автор: Bond

Синтаксис

window.parent

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1 1.3 3 12 9
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Deno
—

Приклади

+ запропонувати свій приклад у пісочниці

Перевірка, чи сторінку не відкрито в чужій рамці.

// найкоротша перевірка «я в iframe?»
if (window !== window.parent) {
    console.warn('Сторінку відкрито в рамці');
}

// до вмісту чужого батька доступу немає — лише повідомлення
window.parent.postMessage({ type: 'ready' }, 'https://example.com');

// найвище вікно в ланцюжку рамок
console.log(window.top === window.parent);
автор: NagarD

У наведеному вище HTML-коді створюється сторінка, яка демонструє використання властивості window.parent. Користувач може натиснути на кнопку "Перевірити window.parent", щоб визначити, чи має поточне вікно батьківське вікно, тобто чи є воно iframe в іншому документі.

HTML

<header>
  <h2 class="title"><code>window.parent</code></h2>
  <p class="description">Дозволяє отримати доступ до батьківського вікна поточного вікна (iframe).</p>
</header>
<main>
  <div class="result">
    <p id="demo">Натисніть кнопку, щоб перевірити, чи поточне вікно має батьківське вікно.</p>
    <button onclick="checkParent()">Перевірити <code>window.parent</code></button>
  </div>
</main>

CSS

body {
  font-size: 16px;
  line-height: 1.5;
  font-family: monospace;
}

header {
  background-color: #f1f1f1;
  margin-bottom: 25px;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}

header h2.title {
  padding-bottom: 15px;
  border-bottom: 1px solid #999;
}

header p.description {
  font-style: italic;
  color: #222;
}

.result {
  background-color: #f8f8f8;
  padding: 15px;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  text-align: center;
}

button {
  margin-top: 10px;
}

JS

function checkParent() {
  // Цей скрипт перевіряє, чи поточне вікно є іфреймом і має батьківське вікно
  if (window.parent !== window) {
    document.getElementById('demo').innerHTML = 'Це вікно має батьківське вікно.';
  } else {
    document.getElementById('demo').innerHTML = 'Це вікно не є іфреймом і не має батьківського вікна.';
  }
}
//# sourceURL=pen.js
автор: Bond

У цьому прикладі ми використовуємо parent для взаємодії між батьківським і вкладеним вікнами (фреймами). Батьківське вікно може відправити повідомлення вкладеному вікну, і вкладене вікно слухає події message, щоб обробити отримані дані.

// У цьому прикладі ми використовуємо parent для взаємодії між вкладеними вікнами.
// Внутрішнє вікно може взаємодіяти зі своїм батьківським вікном.

// Код в батьківському вікні
function sendMessageToChild() {
  // Отримуємо посилання на вкладене вікно за допомогою parent
  let childWindow = window.frames['childFrame'];

  // Відправляємо повідомлення вкладеному вікну
  childWindow.postMessage('Привіт, це батьківське вікно!', '*');
}

// Код у вкладеному вікні (фреймі)
window.addEventListener('message', function(event) {
  // Перевіряємо, чи отримано повідомлення від батьківського вікна
  if (event.source === parent) {
    alert('Отримано повідомлення від батьківського вікна: ' + event.data);
  }
});
автор: Bond

У цьому прикладі ми використовуємо parent для динамічного завантаження зовнішнього скрипта в батьківському вікні. Це може бути корисним, наприклад, для динамічного завантаження модулів або бібліотек у веб-додатках.

// У цьому прикладі ми використовуємо parent для динамічного завантаження ресурсів в батьківському вікні.

// Код в батьківському вікні
function loadResourceInParent() {
  // Отримуємо посилання на батьківське вікно за допомогою parent
  let parentWindow = window.parent;

  // Створюємо новий елемент script та додаємо його до батьківського вікна
  let scriptElement = document.createElement('script');
  scriptElement.src = 'https://example.com/script.js';
  parentWindow.document.head.appendChild(scriptElement);
}
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід