Кратко
СкопированоМетод open
объекта window
позволяет открывать ссылки в новом окне, в новой вкладке или в iframe.
Простой пример
Скопированоwindow.open('https://practicum.yandex.ru/');
window.open('https://practicum.yandex.ru/');
Как пишется
СкопированоМетод open
имеет три опциональных параметра:
window.open(url, target, windowFeatures);
window.open(url, target, windowFeatures);
url
– строка, которая содержит относительный или абсолютный URL.
target
– строка, которая указывает где откроется новое окно. Он может принимать те же значения, что и атрибут target тега <a>
: имя окна или одно из ключевых слов _self
, _blank
, _parent
, _top
.
window
– строка, которая позволяет детально описать, как будет выглядеть новое окно. Опции в строке указываются через запятую в формате name
, для булевых типов значение можно опустить.
Вызвать метод без параметров тоже можно, по умолчанию будет открыта чистая вкладка about
.
Значения:
СкопированоЧисловые:
width
or inner
/ height
or inner
- определит ширину и высоту содержимого окна включая полосы прокрутки. Минимальное возможное значения - 100px.
left
or screen
/ top
or screen
- здесь можно указать расстояние от левой верхней части (или рабочей области) экрана пользователя, на котором откроется окно.
Булевые:
popup
- открывает ссылку в новом окне
menubar
- отвечает за отображение строки меню
toolbar
- управляет показом кнопок панели инструментов и панели закладок
location
- отвечает за показ адресной строки
resizable
- позволяет включить/выключить возможность пользователям изменять размеры окна
scrollbars
- отображение полос прокрутки
status
- отображение строки состояния
noopener
- помогает повысить безопасность сайта, так как предотвращает доступ открываемого ресурса к текущей странице (через сеанс браузера).
При использовании noopener
значения второго параметра метода open
(кроме _top
, _self
, _parent
), будут обработаны как _blank
noreferrer
- предотвращает передачу информации об исходном ресурсе на целевой. При установке этого значения как true
noopener
также становится true
.
Примеры использования
Скопированоwindow.open("https://ya.ru/", "_self"); // ссылка откроется в текущем окнеwindow.open("https://ya.ru/", "yandex", "popup"); // ссылка откроется в новом окне, которое примет имя "yandex"window.open("https://ya.ru/", "_blank", "top=100, left=100, width=400, height=500"); // ссылка откроется в новом окне, величина отступов и размеры окна будут соответствовать указанным
window.open("https://ya.ru/", "_self"); // ссылка откроется в текущем окне window.open("https://ya.ru/", "yandex", "popup"); // ссылка откроется в новом окне, которое примет имя "yandex" window.open("https://ya.ru/", "_blank", "top=100, left=100, width=400, height=500"); // ссылка откроется в новом окне, величина отступов и размеры окна будут соответствовать указанным
Возможности
СкопированоИспользование метода open
позволяет получить ссылку на новое окно и взаимодействовать с ним, например:
const newWindow = window.open("", "new window", "popup");newWindow.document.write("<p>Hello, World!</p>");// откроется новое окно с текстом "Hello, World!"
const newWindow = window.open("", "new window", "popup"); newWindow.document.write("<p>Hello, World!</p>"); // откроется новое окно с текстом "Hello, World!"
Особенности применения
СкопированоАвторы MDN рекомендуют использовать метод open
в крайних случаях и (никогда!) не прибегать к встроенному (inline) использованию window
.
<a href='#' onclick='window.open(`any url`)'> <!-- когда делаете так, где-то плачет котик. Не делайте так -->
<a href='#' onclick='window.open(`any url`)'> <!-- когда делаете так, где-то плачет котик. Не делайте так -->
У метода open
есть несколько недостатков:
- многие браузеры блокируют попапы.
open
решает за пользователя, как именно открыть ссылку. Улучшится ли пользовательский опыт, если чтению контента будут мешать неожиданно всплывающие окна или переходы на новую вкладку (вместо открытия их в фоновом режиме)? Вряд ли.( ) - инлайновые значения вызывают неожиданное поведение ссылки при взаимодействии с ней (и не только). Важно и то, что они также передают неправильную семантику скринридерам.
Узнать подробнее можно на сайте MDN