window.open()
Содержание- Синтаксис
- Открыть страницу в новой вкладке
- Pop-up с заданными размерами
- Взаимодействие с новым окном
- Получить доступ к странице из нового окна
- Закрыть окно с помощью close()
- Проверить закрыто ли окно - свойство closed
- Передать фокус - focus()
- Убрать фокус - blur()
- Изменить размеры или переместить окно
- Прокрутка окна
- Популярные события
- Итого
open() - метод объекта window позволяет открыть ссылки в новом или всплывающем окне или новой вкладке.
Синтаксис
window.open(url, target, windowFeatures)
url необязательный - относительный или полный путь до страницы в формате строки - заключается в одинарные или двойные кавычки. Если оставить строку пустой ” или пропустить параметр, откроется пустая страница.
target необязательный - можно указать имя нового окна - window.name, если метод найдет окно с таким же именем, тогда URL откроется в нем, если нет, то откроется новое. Также параметр может принимать те же значения, что и атрибут target тега <a>, с отличием, что по умолчанию идет _blank:
_blank- страница будет загружена в новом окне браузера;_self- страница загрузиться в том же самом окне;_parent- загрузиться в родительской странице текущего элемента. Например если действие происходит во фрейме, ссылка откроется на странице куда он вставлен. Если родительской нет, то работает, как_self._top- страница откроется в окне высшего уровня, какая бы вложенность элементов не была. Если родителя нет, то ведёт себя как_self.
windowFeatures необязательный - здесь можно детально описать, как будет выглядеть новое окно и где располагаться. Параметры записываются через запятую в формате name=value, для булевых можно просто name. Доступные параметры:
widthилиinnerWidth- ширина содержимого, в том числе полоса прокрутки, минимум 100px;heightилиinnerHeight- высота содержимого, в том числе полоса прокрутки, минимум 100px;leftилиscreenX- расстояние в пикселях от левой части рабочей области пользователя;topилиscreenY- расстояние в пикселях от верхней части рабочей области пользователя.
Булевые параметры
popup- приtrueссылка откроется в новом окне.noopener- параметр предотвращает доступ новому окну к исходной странице и возвращаетnull. Все значения второго параметра методаopen(), кроме_top,_selfи_parentобрабатываются, как_blank.noreferrer- блокирует передачу информации о исходной странице и устанавливаетnoopener=true.
Открыть страницу в новой вкладке
open('https://learnjs.ru/journal/knigi-javascript/', 'BooksJS')
Большинство браузеров блокируют всплывающие окна, которые были вызваны не в результате действий пользователя.
<button id="btn">Открыть страницу</button>
<script>{"let btnBuy = document.querySelector('#btn')\n btnBuy.addEventListener('click', () => {\n open('https://learnjs.ru/redaktory-koda/', 'codeEditor')\n })"}</script>
В данном случае ссылка откроется при клике на кнопку без проблем.
Pop-up с заданными размерами
window.open('https://learnjs.ru/', 'LearnJS', 'width=500,height=500,left=650,top=200')
Для удобства третий параметр можно записать в переменную и при вызове метода open(), использовать уже его.
let paramsPopUp = `width=500,height=500,left=650,top=200`
window.open('https://learnjs.ru/', 'LearnJS', paramsPopUp)
Взаимодействие с новым окном
open() возвращает ссылку на новое окно, тем самым позволяя манипулировать им с помощью вызова определенных методов и получения значений свойств.
let newWindow = window.open('', 'createWindow', 'popup')
newWindow.document.write('<h1>Практикуйтесь в написании кода каждый день</h1>')
Здесь мы записали ссылку в переменную newWindow, а затем с помощью write() вывели в новом окне наш текст.
Получить доступ к странице из нового окна
Получить ссылку из нового окна на родителя можно с помощью свойства opener
let myWindow = window.open('','newPopUp','width=200,height=200,left=400,top=200')
myWindow.document.write('<button id="btn">Кликни на меня</button>')
let getButton = myWindow.document.querySelector('#btn')
getButton.addEventListener('click', () => {
myWindow.opener.document.write('<h1>Текст на исходной страницы заменен</h1>')
})
Закрыть окно с помощью close()
let newWindow = window.open('https://learnjs.ru', 'LearnJS', 'width=500,height=500')
setTimeout(() => newWindow.close(), 3000)
Код откроет всплывающее окно, а через 3 секунды его закроет.
Проверить закрыто ли окно - свойство closed
let newWindow = window.open('', 'newPopUp', 'width=500,height=500')
newWindow.document.write('<h1>Закрой меня</h1>')
let timerId = setInterval(() => {
if(newWindow.closed) {
alert('Pop-up закрыт')
clearInterval(timerId)
}
}, 1000)
Свойство closed содержит значение true - окно закрыто или false - окно открыто. В нашем примере мы сначала открываем pop-up и далее запускаем проверку - закрыто ли окно. Когда пользователь его закроет, тогда сработает alert(‘Pop-up закрыт’).
Передать фокус - focus()
Для выполнения задачи есть метод focus()
<button id="btn">Открыть страницу</button>
<script>{"let btn = document.querySelector('#btn')\n btn.addEventListener('click', () => {\n let myWindow = window.open('','newWindow','popup, width=300,height=300,top=400,left=400')\n myWindow.document.write('<input id=\"new-input\" /></input>')\n getInput = myWindow.document.querySelector('#new-input')\n getInput.focus()\n })"}</script>
Здесь мы передали фокус на поле ввода.
Убрать фокус - blur()
Для того, чтобы убрать фокус есть метод blur()
<button id="btn">Открыть страницу</button>
<script>{"let btn = document.querySelector('#btn')\n btn.addEventListener('click', () => {\n let myWindow = window.open('','newWindow','popup, width=300,height=300,top=400,left=400')\n myWindow.document.write('<input id=\"new-input\" /></input>')\n getInput = myWindow.document.querySelector('#new-input')\n setInterval(() => {\n getInput.blur()\n }, 100)\n })"}</script>
Здесь мы наоборот каждый 0,1 секунду убираем фокус с поля ввода в новом окне. Придется постараться, чтобы туда что-то напечатать.
Изменить размеры или переместить окно
newWindow.moveBy(x,y) - переместить окно в пикселях, x - вправо, y - вниз. Возможны отрицательные значения.
newWindow.moveTo(x,y) - переместить в заданную координату.
newWindow.resizeBy(width,height) - изменить размер окна на указанную величину. Возможны отрицательные значения.
newWindow.resizeTo(width,height) - изменить размер окна на заданное значение.
<button id="btn">Открыть страницу</button>
<script>{"let btn = document.querySelector('#btn')\n btn.addEventListener('click', () => {\n let myWindow = window.open('','newWindow','popup, width=200,height=200')\n setTimeout(() => {\n myWindow.moveBy(400,400)\n myWindow.resizeBy(200,200)\n }, 2000)\n })"}</script>
Методы будут работать, если окно создано вследствие взаимодействия пользователя с элементами страницы. Если окно создается без участия юзера, чаще всего браузеры будут блокировать такие изменения.
Прокрутка окна
newWindow.scrollBy(x,y) - прокрутка окна в пикселях, x - вперед, y - назад. Возможны отрицательные значения.
newWindow.scrollTo(x,y) - прокрутить окно к указанным координатам.
element.scrollIntoView(top) - прокрутить окно так, чтобы был полностью виден указанный элемент. Если значение top равно true или не задано, тогда верх элемента совпадает с верхом экрана, если false, тогда низ с низом.
Популярные события
onresize - изменение размера окна
onscroll - прокрутка окна
onload - страница загружена
onfocus - фокус установлен
onblur - фокус потерян
<button id="btn">Открыть страницу</button>
<script>{"let btn = document.querySelector('#btn')\n btn.addEventListener('click', () => {\n let myWindow = window.open('','newWindow','width=500,height=500,left=400,top=300')\n myWindow.document.write('<input id=\"new-input\" /></input>')\n getInput = myWindow.document.querySelector('#new-input')\n setInterval(() => {\n getInput.onfocus = () => {\n myWindow.document.write('<p>Пора учить JavaScript</p>')\n }\n }, 100);\n })"}</script>
По клику создаем pop-up, а далее отслеживаем, когда input получит фокус. При достижении события добавляем в наше всплывающее окно заветное Пора учить JavaScript.
Итого
1. Метод open() позволяет открывать всплывающие окна и новые вкладки, а также получать ссылки на них, тем самым давая возможность манипулировать ими.
2. Не только родитель имеет доступ к новому окну, но и новое окно может получить доступ к исходному с помощью свойства opener.
3. Браузеры настороженно относятся к новым окнам, которые были открыты или изменены без ведома пользователя, поэтому подобные события часто блокируются.
4. Создавая новое окно с помощью метода open(), можно указать через параметры его размер, а также как и где оно будет открыто.
5. Полезные методы для взаимодействия в новым окном:
close()- закрыть окно;focus()- передать фокус;blur()- убрать фокус;moveBy(x,y),moveTo(x,y),resizeBy(width,height),resizeTo(width,height)- изменение размеров и перемещение;scrollBy(x,y),scrollTo(x,y),scrollIntoView(top)- прокрутка окна.