Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавляет доку про window.close() #5527

Open
wants to merge 25 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2a5120c
Добавляет доку про `window.close()`
ra1nbow1 Oct 13, 2024
f306042
Редачит
TatianaFokina Oct 18, 2024
c414fe8
Добавляет пояснения
ra1nbow1 Oct 19, 2024
ca5b900
Немного улучшает предложения
TatianaFokina Oct 20, 2024
a01e598
Важные правки
ra1nbow1 Oct 21, 2024
0acea4c
Изменяет пример
ra1nbow1 Oct 23, 2024
03a850f
Перемещает определение вверх
ra1nbow1 Jan 23, 2025
e8f5408
Update js/window-close/index.md
ra1nbow1 Jan 24, 2025
09e10fa
Update js/window-close/index.md
ra1nbow1 Jan 24, 2025
ef63ac4
Update js/window-close/index.md
ra1nbow1 Jan 24, 2025
1c0235c
Добавляет демо и радикально сокращает текст
vitya-ne Jan 25, 2025
11ce4ef
Добавляет спокойствия линтеру
vitya-ne Jan 25, 2025
a7772ab
Update js/window-close/index.md
vitya-ne Jan 27, 2025
be01ee6
Причёсывает код демки
Inventoris Jan 27, 2025
87f4398
Исправляет код примера
vitya-ne Jan 27, 2025
4ee9505
Update js/window-close/index.md
vitya-ne Jan 27, 2025
72a43ec
Update js/window-close/index.md
vitya-ne Jan 27, 2025
3fea580
JS — жёлтый :)
skorobaeus Jan 27, 2025
8f58093
Дополняет и исправляет
vitya-ne Jan 27, 2025
167fa15
Добавляет демо
vitya-ne Jan 27, 2025
42e0c91
Чуть-чуть правит текст
Inventoris Jan 28, 2025
5b8ce6e
Правит одну демку
Inventoris Jan 28, 2025
29f9c65
Правит другую демку
Inventoris Jan 28, 2025
9b04546
Изменяет демо для отслеживания закрытия окна
vitya-ne Jan 28, 2025
8901677
Убирает точку запятую
Inventoris Jan 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions js/window-close/demos/open-close-window/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Пример window.close() — Дока</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap">
<style>
*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}

html,
body {
scrollbar-gutter: stable;
}

html {
height: 100vh;
color-scheme: dark;
font-size: 18px;
}

body {
min-height: 100vh;
padding: 50px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 4rem;
background-color: #18191C;
color: #FFFFFF;
font-family: "Roboto", sans-serif;
}
.button {
min-width: 210px;
padding: 9px 15px;
border: 2px solid transparent;
border-radius: 6px;
font-size: 1rem;
font-weight: 300;
font-family: inherit;
transition: background-color 0.2s linear;
color: #000000;
background-color: #C56FFF;
}
.button:hover {
background-color: #FFFFFF;
cursor: pointer;
transition: background-color 0.2s linear;
}
.button:disabled {
opacity: 0.5;
pointer-events: none;
}
</style>
</head>
<body>
<button id="buttonOpen" class="button">Открыть окно</button>
<button id="buttonClose" class="button" disabled>Закрыть окно</button>
<script>
const buttonOpen = document.querySelector('#buttonOpen')
const buttonClose = document.querySelector('#buttonClose')

const openWindow = () => {
const newWindow = window.open('https://doka.guide/index.html', '_blank', 'top=40, left=40, width=500, height=400')
return newWindow
}

const closeWindow = (windowProxy) => windowProxy.close()

let currentWindow

buttonOpen.addEventListener('click', function (event) {
buttonOpen.disabled = true
buttonClose.disabled = false
currentWindow = openWindow()
})

buttonClose.addEventListener('click', function (event) {
buttonClose.disabled = true
buttonOpen.disabled = false
closeWindow(currentWindow)
})
</script>
</body>
</html>
46 changes: 35 additions & 11 deletions js/window-close/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,58 @@
title: "`window.close()`"
description: "Закройте окно, а то что-то холодно."
authors:
- doka-dog
- ra1nbow1
contributors:
- vitya-ne
related:
- js/window-open
- js/window-history
- js/window-print
tags:
- doka
- placeholder
---

## Кратко

Метод `close()` объекта `window` закрывает текущее или другое вызванное окно.
Метод `.close()` объекта `window` закрывает окно ранее открытое с использованием [`windiw.open()`](/js/window-open/).
vitya-ne marked this conversation as resolved.
Show resolved Hide resolved

## Пример

```js
let openedWindow
// Создаём функцию для открытия окна с Докой
const openWindow = () => window.open('doka.guide/index.html')
vitya-ne marked this conversation as resolved.
Show resolved Hide resolved
// Создаём функцию для закрытия окна
const closeWindow = (windowProxy) => windowProxy.close()

function openWindow() {
openedWindow = window.open("doka.guide.html")
}
// Открываем окно
const currentWindow = openWindow();
vitya-ne marked this conversation as resolved.
Show resolved Hide resolved

function closeOpenedWindow() {
openedWindow.close()
}
// Работаем с новым окном
// ...

// Закрываем открытое ранее окно
closeWindow(currentWindow)
```

## Интерактивный пример

<iframe title="Закрываем открытое окно" src="demos/open-close-window/" height="695"></iframe>
vitya-ne marked this conversation as resolved.
Show resolved Hide resolved

## Как пишется

Метод можно вызвать только если окно было открыто через [`window.open()`](/js/window-open/) или если это окно верхнего уровня без записей в истории.
```js
openedWindow.close()
```
`openedWindow` — `windowProxy`-объект, результат ранее выполненного `window.open()`.
vitya-ne marked this conversation as resolved.
Show resolved Hide resolved

Метод `close()` не имеет параметров и возвращает `undefined`.

## Как понять

Метод `close()` закрывает окно, только если окно было открыто через [`window.open()`](/js/window-open/). Это ограничение связано с вопросами безопасности в браузерах: оно предотвращает закрытие окон, которые открыл сам пользователь.
vitya-ne marked this conversation as resolved.
Show resolved Hide resolved

Например, с помощью этого метода невозможно закрыть открытую с помощью браузера вкладку или сам браузер.

## Подсказки

💡 Используйте `window.close()`, только когда пользователь готов к закрытию окна. Для этого можно добавить поп-ап с согласием.
Loading