JS властивість Object.closed


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

Властивість closed об'єкта Window у JavaScript надає можливість перевірити, чи було закрите вікно браузера або вкладка. Ця властивість повертає булеве значення: true, якщо вікно закрите, і false – якщо воно відкрите. Властивість closed є часто використовуваною для управління взаємодією між батьківськими та дочірніми вікнами, дозволяючи розробникам відстежувати стан цих вікон та відповідно реагувати на їх зміну.

Основна корисність властивості closed полягає у можливості перевірки статусу вікна без необхідності виклику виняткових методів або ведення додаткового статусу вікна. Це особливо важливо у сценаріях, де потрібно забезпечити взаємодію між вікнами, наприклад, при роботі з вікнами-спливаючими діалогами (pop-ups) або при створенні складних користувацьких інтерфейсів, що використовують кілька вікон.

Використання властивості closed

  1. Базове використання: Найпростіший спосіб використати властивість closed - перевірити статус вікна після його відкриття за допомогою window.open(). Припустимо, ви відкрили нове вікно і хочете перевірити, чи користувач його закрив.
let newWindow = window.open("https://example.com", "_blank");
if (newWindow.closed) {
		console.log("Вікно було закрите.");
} else {
		console.log("Вікно ще відкрите.");
}

У цьому прикладі, після спроби відкриття вікна, виконується перевірка його статусу.

  1. Перевірка стану вікна у реальному часі: Можна використовувати setInterval для періодичної перевірки статусу вікна. Це може бути корисно, коли потрібно виконати деякі дії в батьківському вікні, як тільки дочірнє вікно буде закрите.
let newWindow = window.open("https://example.com", "_blank");
let checkInterval = setInterval(() => {
		if (newWindow.closed) {
				console.log("Вікно було закрите.");
				clearInterval(checkInterval);
		}
}, 1000);

У цьому прикладі код регулярно (кожну секунду) перевіряє статус вікна та виводить повідомлення, коли вікно закрите.

  1. Комбінування з іншими подіями та методами: Властивість closed може використовуватися разом з іншими подіями та методами для створення складніших інтерактивних сценаріїв. Наприклад, вона може бути комбінована з подією beforeunload для запиту підтвердження від користувача перед закриттям вікна.
let newWindow = window.open("https://example.com", "_blank");
newWindow.onbeforeunload = function() {
		return "Ви впевнені, що хочете закрити це вікно?";
};

// Перевірка статусу вікна
if (newWindow.closed) {
		console.log("Вікно було закрите.");
}

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

автор: Bond

Порада

Під час роботи з window.closed, уникайте безкінечного опитування стану вікна, оскільки це може привести до зайвого споживання ресурсів. Використовуйте setInterval або setTimeout для контрольованої перевірки стану.

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

Переконайтесь, що ваш код обробляє сценарії, коли вікно може бути вже закритим. Доступ до властивостей або методів закритого вікна може призвести до помилок. Використовуйте умовну перевірку з window.closed, перш ніж здійснювати подальші дії з вікном.

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

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

автор: Bond

Синтаксис

closed

Переглядачі

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

Приклади

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

У цьому прикладі ми демонструємо базове використання властивості Window.closed. Сценарій перевіряє, чи вікно браузера, відкрите за допомогою методу window.open(), було закрито. Це корисно, наприклад, для сценаріїв, де потрібно підтвердити закриття вікна перед продовженням подальших дій.

HTML

<button id="open">Відкрити вікно</button>

JS

let newWindow = null;

document.getElementById('open').addEventListener('click', () => {
    newWindow = window.open('https://css.in.ua');

    if (!newWindow) {
        console.log('Спливне вікно заблоковано браузером');
        return;
    }

    setTimeout(() => {
        console.log(newWindow.closed ? 'Вікно закрите.' : 'Вікно ще відкрите.');
    }, 1000);
});
автор: Bond

У цьому прикладі, користувачі матимуть можливість натискати на кнопку "Відкрити нове вікно", щоб створити нове вікно браузера. Після цього, вони можуть використовувати кнопку "Перевірити стан вікна", щоб побачити, чи вікно вже закрите. Статус вікна буде відображатися у текстовому елементі. Це демонструє динамічне використання властивості Window.closed.

автор: Bond

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

// Відкриття нового вікна
let childWindow = window.open("https://example.com");

// Функція для перевірки стану вікна
function checkWindowStatus() {
    if (childWindow.closed) {
        console.log("Дочірнє вікно закрите.");
        clearInterval(intervalId); // Зупинка таймера
    } else {
        console.log("Дочірнє вікно все ще відкрите.");
    }
}

// Періодична перевірка кожні 5 секунд
let intervalId = setInterval(checkWindowStatus, 5000);
автор: Bond

Коментарі

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

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

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

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

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

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

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

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

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

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

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

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