1

Open: примеры (JAVASCRIPT)

Использование функции open в JavaScript
Раздел: BOM, Окна
open(name: String, version: Number): IDBOpenDBRequest

Описание функции window.open

Функция window.open() является методом объекта Window в JavaScript. Она используется для открытия нового окна браузера или новой вкладки. Этот метод часто применяется для создания всплывающих окон, хотя современные браузеры часто блокируют такие окна по умолчанию.

Функция принимает до четырех аргументов:

  • url (необязательный) - строка, определяющая URL-адрес для загрузки в новом окне. Если указана пустая строка или аргумент опущен, открывается пустое окно.
  • target (необязательный) - строка, определяющая имя или контекст нового окрама/вкладки. Это может быть стандартное имя (_blank, _self, _parent, _top) или пользовательское имя. Имя используется в атрибуте target ссылок или форм.
  • windowFeatures (необязательный) - строка, содержащая список параметров окна, разделенных запятыми, без пробелов. Например, width=400,height=300. Параметры определяют размеры, положение и другие характеристики нового окна.
  • replace (необязательный) - булево значение, указывающее, должна ли новая страница заменять текущую запись в истории сессии браузера (true) или создавать новую запись (false).

Функция возвращает ссылку на объект Window нового окрама или null, если открытие окна было заблокировано браузером. Возвращенный объект может использоваться для управления новым окном (например, для изменения его содержимого или закрытия).

Простые примеры использования

Пример открытия нового окна с указанным URL:

let newWindow = window.open('https://example.com', '_blank');
// Открывается новое окно или вкладка с сайтом example.com

Пример открытия окна с определенными размерами и без некоторых элементов интерфейса:

let features = 'width=600,height=400,menubar=no,toolbar=no,location=no';
let myWindow = window.open('', 'myWindow', features);
myWindow.document.write('<h1>Привет, мир!</h1>');
// Открывается новое окно размером 600x400 без меню, панели инструментов и адресной строки, содержащее текст "Привет, мир!"

Пример с флагом replace:

// Новое окно заменит текущую запись в истории
window.open('page2.html', '_blank', '', true);

Похожие функции в JavaScript

В JavaScript существуют альтернативные способы открытия нового контекста:

  • window.location.href или window.location.assign() - используются для навигации в текущем окне. Отличие от open заключается в том, что они не создают новое окно, а меняют URL текущего.
  • Создание ссылки (<a>) с атрибутом target="_blank" и программный клик по ней. Этот метод более предсказуем с точки зрения политики браузера относительно всплывающих окон, так как инициируется действием пользователя.
  • document.open() - это другой метод, который открывает документ для записи. Он очищает текущий документ и позволяет записывать в него новое содержимое. Не следует путать с window.open().

Метод с ссылкой предпочтительнее для действий, инициированных пользователем (например, по клику на кнопке), так как он с меньшей вероятностью будет заблокирован.

Типичные ошибки

Одна из самых распространенных проблем - блокировка всплывающих окон браузером. Если вызов window.open() происходит не в результате прямого действия пользователя (например, не по клику, а при загрузке страницы или по таймеру), браузер, скорее всего, заблокирует новое окно.

// Этот вызов, скорее всего, будет заблокирован
setTimeout(() => { window.open('https://example.com'); }, 1000);
// В консоли браузера может появиться предупреждение о блокировке всплывающего окна.

Другая ошибка - неверное указание спецификаций окна.

// Пробелы в строке спецификаций приведут к игнорированию параметров или ошибке
window.open('', '_blank', 'width=400, height=300'); // Пробел после запятой

Также часто забывают, что функция возвращает null при блокировке, и попытка работать с возвращенным значением как с объектом вызывает ошибку.

let winRef = window.open('https://example.com');
winRef.document.write('Текст'); // Ошибка, если winRef равен null

Изменения в современных браузерах

В последние годы браузеры ужесточили политику безопасности в отношении функции window.open(). Основные изменения касаются контекста вызова: большинство браузеров разрешают открытие новых окон только в ответ на явное действие пользователя (например, клик мыши или нажатие клавиши). Вызовы из асинхронных функций (например, внутри setTimeout или обработчиков Promise) часто блокируются.

Некоторые спецификации окна, такие как dependent, channelmode, больше не поддерживаются или игнорируются в современных браузерах. Также появилась возможность использования относительных единиц (например, left=100px) в дополнение к абсолютным значениям.

Браузеры все чаще трактуют параметр target с пользовательским именем как указание открыть новую вкладку, а не отдельное окно, особенно если спецификации окна не заданы или заданы минимально.

Расширенные примеры

Пример открытия окна и последующего взаимодействия с ним через ссылку:

Пример javascript
let popup;
function openPopup() {
popup = window.open('', 'myPopup', 'width=300,height=200');
popup.document.body.innerHTML = '<h2>Это попап</h2><button onclick="window.close()">Закрыть</button>';
}
// Из родительского окна можно закрыть попап
function closePopup() {
if(popup && !popup.closed) {
popup.close();
}
}

Пример передачи данных из родительского окна в дочернее после его открытия:

Пример javascript
let dataWindow = window.open('', '_blank');
dataWindow.document.write('<html><body><p id="output"></p></body></html>');
let message = { text: 'Данные из основного окна', date: new Date() };
dataWindow.document.getElementById('output').innerText = JSON.stringify(message, null, 2);

Пример использования вместе с обработчиком события beforeunload в новом окне:

Пример javascript
let win = window.open('about:blank', '_blank');
win.document.write(`
<script>
window.addEventListener('beforeunload', function(event) {
// Можно выполнить какие-то действия перед закрытием
console.log('Окно закрывается');
});
</script>
<body>Закройте это окно, чтобы увидеть сообщение в консоли.</body>
`);

Пример попытки открытия окна с центрированием на экране:

Пример javascript
function openCenteredWindow(url, title, w, h) {
const left = (screen.width / 2) - (w / 2);
const top = (screen.height / 2) - (h / 2);
return window.open(url, title, `width=${w},height=${h},top=${top},left=${left}`);
}
openCenteredWindow('', 'Центрированное окно', 400, 300);

Аналоги функции в других языках

В других языках программирования существуют свои механизмы для открытия окон или выполнения аналогичных действий.

PHP (отправка заголовка для открытия в новом окне не является прямой функцией PHP, но может быть инициирована):

// PHP не может напрямую открыть окно браузера, но может сформировать HTML или JavaScript
echo "<script>window.open('https://example.com', '_blank');</script>";

Python (с использованием модуля webbrowser):

import webbrowser
webbrowser.open('https://example.com', new=1) # new=1 открывает в новом окне, если возможно
webbrowser.open_new_tab('https://example.com')
// Запускается браузер по умолчанию и открывается указанный URL.

MySQL - не имеет прямых функций для работы с окнами браузера, так как это СУБД.

C - в стандартной библиотеке нет функции для открытия окон браузера. Обычно для этого используют системные вызовы или сторонние библиотеки.

Ключевое отличие заключается в том, что window.open выполняется в среде браузера на клиенте, в то время как в серверных языках (PHP, Python) команда обычно формирует код для клиента или использует системные возможности самого сервера.

JS open function comments

En
Open Opens a connection to a database