Это седьмой день моего участия в августовском испытании обновлений, подробности о мероприятии:Испытание августовского обновления
оконный объект
Обзор
в браузере,window
объект (примечание,w
нижний регистр) относится к текущему окну браузера. Он также является объектом верхнего уровня текущей страницы, то есть объектом верхнего уровня, а все остальные объекты являются его подчиненными. Если переменная не объявлена, по умолчанию она является свойством объекта верхнего уровня.
a = 1;
window.a // 1
В приведенном выше кодеa
— это переменная, которая присваивается напрямую без объявления и автоматически становится свойством объекта верхнего уровня.
window
У него есть свое значение сущности, но он не подходит в качестве объекта верхнего уровня высшего уровня Это ошибка дизайна языка. Когда язык был первоначально разработан, первоначальная идея заключалась в том, что чем меньше объектов будет встроено в язык, тем лучше, что повысит производительность браузера. Поэтому языковой дизайнер Брендан Эйх поставилwindow
Объект обрабатывается как объект верхнего уровня, и все необъявленные переменные, которым присвоены значения, автоматически становятсяwindow
свойства объекта. Такой дизайн делает невозможным обнаружение необъявленных переменных на этапе компиляции, но сегодня нет возможности их исправить.
globalThis
ES11 представил globalThis для унификации с nodejs в браузере.globalThis === window
, в узлахglovalThis === global
Свойства объекта окна
window.name
window.name
Свойство представляет собой строку, представляющую имя текущего окна браузера. Окну не обязательно нужно имя, этот атрибут в основном используется с гиперссылками и формами.target
использование имущества.
window.name = 'Hello World!';
console.log(window.name)
// "Hello World!"
Это свойство может сохранять только строки. Если записанное значение не является строкой, оно будет автоматически преобразовано в строку. Емкость хранилища этого значения варьируется от браузера к браузеру, но в целом она может достигать нескольких МБ.
Это свойство не исчезнет, пока окно браузера не будет закрыто. Например, посетитеa.com
, скрипт страницы устанавливаетwindow.name
, а затем загружается в том же окнеb.com
, скрипт новой страницы может читать настройки предыдущей страницыwindow.name
. Это также относится к обновлениям страниц. Как только окно браузера закрывается, значение, сохраненное этим свойством, исчезает, поскольку окно больше не существует.
окно.закрыто, окно.открывается
window.closed
Свойство возвращает логическое значение, указывающее, закрыто ли окно.
window.closed // false
Приведенный выше код проверяет, закрыто ли текущее окно. Эта проверка не имеет большого значения, потому что текущее окно определенно не закрыто, пока код может быть запущен. Это свойство обычно используется для проверки того, закрыто ли новое окно, открытое с помощью скрипта.
var popup = window.open();
if ((popup !== null) && !popup.closed) {
// 窗口仍然打开着
}
window.opener
Свойство представляет родительское окно, которое открывает текущее окно. Если текущее окно не имеет родительского окна (т. е. открыто прямо в адресной строке), вернутьnull
.
window.open().opener === window // true
Приведенное выше выражение откроет новое окно, а затем вернетtrue
.
Если связь между двумя окнами не требуется, рекомендуетсяopener
свойство явно установлено вnull
, что может снизить некоторые риски безопасности.
var newWin = window.open('example.html', 'newWindow', 'height=400,width=400');
newWin.opener = null;
В приведенном выше коде дочернее окноopener
свойство установлено наnull
, нет возможности общаться между двумя окнами.
пройти черезopener
properties вы можете получить глобальные свойства и методы родительского окна, но только когда два окна имеют одинаковое происхождение (см. главу «Ограничения одинакового происхождения»), и одно из окон открывается другим.<a>
добавление элементаrel="noopener"
Свойство может предотвратить получение родительского окна вновь открытым окном и снизить риск изменения URL-адреса родительского окна вредоносными веб-сайтами.
<a href="https://an.evil.site" target="_blank" rel="noopener">
恶意网站
</a>
окно.себя, окно.окно
window.self
а такжеwindow.window
Все свойства указывают на само окно. Эти два свойства доступны только для чтения.
window.self === window // true
window.window === window // true
окно.кадры, окно.длина
window.frames
Свойство возвращает массивоподобный объект, элементами которого являются все окна фреймов на странице, включаяframe
элементы иiframe
элемент.window.frames[0]
Представляет первое окно кадра на странице.
еслиiframe
элемент установленid
илиname
атрибут, то вы можете использовать значение атрибута для ссылки на этотiframe
окно. Например<iframe name="myIFrame">
Можно использоватьframes['myIFrame']
илиframes.myIFrame
Цитировать.
frames
Собственность на самом делеwindow
Псевдоним объекта.
frames === window // true
следовательно,frames[0]
также можно использоватьwindow[0]
Выражать. Однако семантически,frames
яснее и с учетомwindow
Это также глобальный объект, поэтому рекомендуется всегда использоватьframes[0]
письма. Дополнительные сведения см. в разделе «Многооконный режим» ниже.
window.length
Свойство возвращает общее количество фреймов, содержащихся на текущей веб-странице. Если текущая страница не содержитframe
а такжеiframe
элемент, тоwindow.length
просто вернись0
.
window.frames.length === window.length // true
Приведенный выше код говорит,window.frames.length
а такжеwindow.length
должны быть равны.
window.frameElement
window.frameElement
Свойство в основном используется, когда текущее окно встроено в другую веб-страницу (встроенное<object>
,<iframe>
или<embed>
element), возвращает узел элемента, в котором находится текущее окно. Если текущее окно является окном верхнего уровня или встроенная веб-страница имеет другое происхождение, это свойство возвращаетnull
.
// HTML 代码如下
// <iframe src="about.html"></iframe>
// 下面的脚本在 about.html 里面
var frameEl = window.frameElement;
if (frameEl) {
frameEl.src = 'other.html';
}
В приведенном выше кодеframeEl
переменная<iframe>
элемент.
окно.верхняя часть, окно.родитель
window.top
Атрибут указывает на окно верхнего уровня, которое в основном используется для получения окна верхнего уровня в окне фрейма.
window.parent
Свойство указывает на родительское окно. Если текущее окно не имеет родительского окна,window.parent
указать на себя.
if (window.parent !== window.top) {
// 表明当前窗口嵌入不止一层
}
Для страниц, не содержащих фреймов, эти два свойства эквивалентныwindow
объект.
window.status
window.status
Свойство используется для чтения и записи текста строки состояния браузера. Однако сейчас многие браузеры не позволяют переписывать текст строки состояния, поэтому использование этого метода может оказаться неэффективным.
window.devicePixelRatio
window.devicePixelRatio
Свойство возвращает число, представляющее соотношение между размером одного пикселя CSS и размером одного физического пикселя. То есть он показывает, из скольких физических пикселей состоит пиксель CSS. Его можно использовать для оценки среды отображения пользователя.Если это соотношение велико, это означает, что пользователь использует экран высокой четкости, поэтому может отображаться изображение с более крупными пикселями.
свойство размера позиции
Следующие свойства возвращаютсяwindow
Информация о местоположении и размере объекта.
(1) окно.экранX, окно.экранY
window.screenX
а такжеwindow.screenY
Свойства, возвращающие горизонтальное и вертикальное расстояние (в пикселях) левого верхнего угла окна браузера относительно левого верхнего угла текущего экрана. Эти два свойства доступны только для чтения.
(2) окно.innerHeight, окно.innerWidth
window.innerHeight
а такжеwindow.innerWidth
Свойства, возвращающие высоту и ширину видимой части веб-страницы в текущем окне, то есть размер (в пикселях) «окна просмотра». Эти два свойства доступны только для чтения.
Когда пользователь увеличивает масштаб страницы (например, увеличивает масштаб со 100 % до 200 %), эти два свойства уменьшаются. Потому что размер веб-страницы в пикселях в это время остается неизменным (например, ширина по-прежнему 960 пикселей), но пространство экрана, занимаемое каждым пикселем, становится больше, поэтому видимая часть (окно просмотра) становится меньше.
Обратите внимание, что эти два значения свойства включают высоту и ширину полосы прокрутки.
(3) окно.outerHeight, окно.outerWidth
window.outerHeight
а такжеwindow.outerWidth
Свойства возвращают высоту и ширину окна браузера, включая меню браузера и границу (в пикселях). Эти два свойства доступны только для чтения.
(4) окно.прокруткаX, окно.прокруткаY
window.scrollX
Свойство возвращает расстояние горизонтальной прокрутки страницы,window.scrollY
Свойство возвращает расстояние прокрутки страницы по вертикали в пикселях. Эти два свойства доступны только для чтения.
Обратите внимание, что возвращаемые значения этих двух свойств являются не целыми числами, а числами с плавающей запятой двойной точности. Если страница не прокручивается, их значения равны0
.
Например, если пользователь прокручивает вертикальную полосу прокрутки вниз на 75 пикселей, тоwindow.scrollY
Это примерно 75. Пользователь тянет горизонтальную полосу прокрутки на 200 пикселей по горизонтали вправо,window.scrollX
Это около 200.
if (window.scrollY < 75) {
window.scroll(0, 75);
}
В приведенном выше коде, если расстояние прокрутки страницы меньше 75 пикселей, страница прокручивается вниз на 75 пикселей.
(5) окно.pageXOffset, окно.pageYOffset
window.pageXOffset
свойства иwindow.pageYOffset
атрибут, даwindow.scrollX
а такжеwindow.scrollY
псевдоним.
свойства компонента
Свойство компонента возвращает объект компонента браузера. Такие свойства заключаются в следующем.
-
window.locationbar
: объект адресной строки -
window.menubar
: объект строки меню -
window.scrollbars
: объект полосы прокрутки окна -
window.toolbar
: объект панели инструментов -
window.statusbar
: объект строки состояния -
window.personalbar
: Объект персональной панели инструментов, устанавливаемый пользователем.
этих объектовvisible
Свойство представляет собой логическое значение, указывающее, видны ли эти компоненты. Эти свойства доступны только для чтения.
window.locationbar.visible
window.menubar.visible
window.scrollbars.visible
window.toolbar.visible
window.statusbar.visible
window.personalbar.visible
глобальные свойства объекта
Свойства глобального объекта указывают на некоторые собственные глобальные объекты браузера.
-
window.document
:направлениеdocument
объект, подробности см. в главе "объект документа". Обратите внимание, что это свойство имеет ограничение по гомологии. Только сценарии из одного и того же источника могут читать это свойство. -
window.location
:направлениеLocation
Объект для получения информации об URL текущего окна. это эквивалентноdocument.location
Атрибуты, подробности см. в главе «Объект местоположения». -
window.navigator
:направлениеNavigator
Объект, используемый для получения информации об окружении, подробности см. в главе «Объект Navigator». -
window.history
:направлениеHistory
Объект, представляющий историю посещенных страниц браузера, подробности см. в главе «Объект истории». -
window.localStorage
: Указывает на данные localStorage, хранящиеся локально, подробности см. в главе «Интерфейс хранилища». -
window.sessionStorage
: Указывает на локально сохраненные данные sessionStorage, подробности см. в главе «Интерфейс хранилища». -
window.console
:направлениеconsole
Объект, используемый для управления консолью, подробности см. в главе «Объект консоли». -
window.screen
:направлениеScreen
Объект, представляющий экранную информацию, подробности см. в главе «Экранный объект».
window.isSecureContext
window.isSecureContext
Свойство возвращает логическое значение, указывающее, находится ли текущее окно в зашифрованной среде. Если это протокол HTTPS,true
, иначе этоfalse
.
методы объекта окна
window.alert(), window.prompt(), window.confirm()
window.alert()
,window.prompt()
,window.confirm()
Оба являются глобальными методами взаимодействия браузера с пользователем. Они выводят различные диалоговые окна с просьбой ответить пользователю. Обратите внимание, что все диалоговые окна, открываемые этими тремя методами, представляют собой стили, единообразно заданные браузером, и их нельзя настроить.
(1) окно.предупреждение()
window.alert()
Диалоговое окно, всплывающее методом, имеет только одну кнопку «ОК», которая часто используется для уведомления пользователя определенной информации.
window.alert('Hello World');
Диалог исчезнет, только если пользователь нажмет кнопку «ОК». Пока всплывает диалоговое окно, окно браузера зависает, и пользователь ничего не может сделать, не нажав кнопку «ОК».
window.alert()
Параметрами метода могут быть только строки, нельзя использовать стили CSS, но можно использовать\n
Указывает новую строку.
alert('本条提示\n分成两行');
(2) окно.приглашение()
window.prompt()
Диалоговое окно выскочило методом, под текстом подсказки есть поле ввода, предлагающее пользователю ввести информацию, и есть две кнопки «ОК» и «Отмена». Он часто используется для получения данных, введенных пользователем.
var result = prompt('您的年龄?', 25)
Приведенный выше код вызовет всплывающее диалоговое окно с текстовым приглашением «Ваш возраст?», в котором пользователю будет предложено ввести свой собственный возраст в диалоговом окне (по умолчанию отображается 25). Значение, введенное пользователем, будет сохранено в переменной как возвращаемое значение.result
.
window.prompt()
Возвращаемое значение может быть в двух случаях: это может быть строка (может быть пустая строка) илиnull
. Конкретно разделить на три случая.
- Пользователь вводит информацию и нажимает «ОК», а введенная пользователем информация является возвращаемым значением.
- Пользователь не входит в информацию, нажмите «ОК», то значение по умолчанию ввода по умолчанию является возвращающим значением.
- Пользователь нажал «Отмена» (или нажал кнопку ESC), возвращаемое значение равно
null
.
window.prompt()
Второй параметр метода является необязательным, но всегда лучше указать второй параметр в качестве значения по умолчанию для поля ввода.
(3) окно.подтвердить()
window.confirm()
В появившемся диалоговом окне, кроме подсказки информации, есть только две кнопки «ОК» и «Отмена», которые часто используются для запроса согласия пользователя.
var result = confirm('你最近好吗?');
Приведенный выше код открывает диалоговое окно только с одной строкой текста «Как дела?», и пользователь выбирает, нажать «ОК» или «Отмена».
confirm
Метод возвращает логическое значение, если пользователь нажимает «ОК», возвращаетtrue
; если пользователь нажмет "Отмена", вернутьfalse
.
var okay = confirm('Please confirm this message.');
if (okay) {
// 用户按下“确定”
} else {
// 用户按下“取消”
}
confirm
Одно из применений , заключается в том, что когда пользователь покидает текущую страницу, появляется диалоговое окно с вопросом, действительно ли пользователь хочет уйти.
window.onunload = function () {
return window.confirm('你确定要离开当面页面吗?');
}
Все три метода имеют блокирующий эффект: как только всплывает диалоговое окно, вся страница приостанавливается, ожидая ответа пользователя.
окно.открыть(), окно.закрыть(), окно.стоп()
(1) окно.открыть()
window.open
Этот метод используется для создания другого окна браузера, аналогично опции «Новое окно» в меню браузера. Возвращает ссылку на новое окно или, если новое окно не может быть создано, возвращаетnull
.
var popup = window.open('somefile.html');
Приведенный выше код заставит браузер открыть новое окно с URL-адресом под текущим доменным именем.somefile.html
.
open
Всего метод может принимать три параметра.
window.open(url, windowName, [windowFeatures])
-
url
: строка, представляющая URL-адрес нового окна. Если опущено, URL-адрес по умолчаниюabout:blank
. -
windowName
: Строка, указывающая имя нового окна. Если окно с таким именем уже существует, занять его и больше не создавать новое окно. Если его не указать, он будет использоваться по умолчанию._blank
, что означает создание нового окна без имени. Кроме того, есть несколько предустановленных значений,_self
представляет текущее окно,_top
представляет окно верхнего уровня,_parent
Указывает предыдущее окно. -
windowFeatures
: строка, содержимое представляет собой пару ключ-значение, разделенную запятыми (подробности см. ниже), указывающую параметры нового окна, например наличие панели подсказок, панели инструментов и т. д. Если этот параметр опущен, по умолчанию открывается новое окно с полным пользовательским интерфейсом. Если новое окно является существующим окном, этот параметр не действует, и браузер использует параметры предыдущего окна.
Ниже приведен пример.
var popup = window.open(
'somepage.html',
'DefinitionsWindows',
'height=200,width=200,location=no,status=yes,resizable=yes,scrollbars=yes'
);
В приведенном выше коде говорится, что открывается новое окно высотой и шириной 200 пикселей, без адресной строки, но со строкой состояния и полосами прокрутки, которые позволяют пользователю изменять размер.
Третий параметр может задавать следующие свойства.
- слева: расстояние (в пикселях) нового окна от крайнего левого края экрана. Обратите внимание, что новое окно должно быть видимым и не может быть установлено за пределами экрана.
- top: расстояние (в пикселях) нового окна от верхней части экрана.
- height: Высота (в пикселях) области содержимого нового окна, не менее 100.
- width: Ширина (в пикселях) области содержимого нового окна, не менее 100.
- externalHeight: высота (в пикселях) всего окна браузера, не менее 100.
- OuterWidth: Ширина всего окна браузера не менее 100.
- menubar: отображать ли строку меню.
- панель инструментов: отображать ли панель инструментов.
- location: Отображать ли адресную строку.
- personalbar: отображать ли панель инструментов, установленную пользователем.
- статус: отображать ли строку состояния.
- зависимый: зависит ли от родительского окна. Если зависит, то при сворачивании родительского окна окно также сворачивается, а при закрытии родительского окна окно также закрывается.
- Минимизуемое: есть ли кнопка минимизации, предоставлена
dialog=yes
. - noopener: Новое окно будет отрезано от родительского окна, т.е.
window.opener
возврат собственностиnull
, родительское окноwindow.open()
метод также возвращаетnull
. - resizable: Можно ли изменить размер нового окна.
- полосы прокрутки: разрешить ли появление полос прокрутки в новых окнах.
- диалог: есть ли в строке заголовка нового окна элементы управления для максимизации, минимизации и восстановления исходного размера.
- titlebar: отображать ли строку заголовка в новом окне.
- alwaysRaised: отображать ли в верхней части всех окон.
- alwaysLowered: отображать ли внизу родительского окна.
- close: отображать ли кнопку закрытия в новом окне.
Для тех свойств, которые можно включать и выключать, установите значениеyes
или1
Или открыть без какого-либо значения, напримерstatus=yes
,status=1
,status
получит тот же результат. Если вы хотите отключить его, не пишитеno
, но просто опустите это свойство. То есть если в третьем параметре заданы одни свойства, то другие не заданыyes/no
свойства будут установлены наno
,Толькоtitlebar
и кнопка закрытия (их значения по умолчанию равныyes
).
Для вышеуказанных свойств имя свойства и значение свойства соединяются знаком равенства, а свойства разделяются запятыми.
'height=200,width=200,location=no,status=yes,resizable=yes,scrollbars=yes'
Кроме того,open()
Хотя второй параметр метода может указывать существующее окно, это не означает, что другими окнами можно произвольно управлять. Чтобы предотвратить управление несвязанными окнами, браузер позволяет двум окнам иметь одно и то же происхождение или целевое окно открывается текущей веб-страницей.open
метод указывает на это окно.
window.open
Метод возвращает ссылку на новое окно.
var windowB = window.open('windowB.html', 'WindowB');
windowB.window.name // "WindowB"
Обратите внимание, что если новое окно и родительское окно имеют разное происхождение (т. е. не находятся в одном и том же домене), они не могут получить внутренние свойства оконных объектов друг друга.
Ниже приведен еще один пример.
var w = window.open();
console.log('已经打开新窗口');
w.location = 'http://example.com';
Приведенный выше код сначала открывает новое окно, затем в окне появляется диалоговое окно, а затем URL-адрес направляется наexample.com
.
из-заopen
Этим методом можно легко злоупотребить, и многие браузеры по умолчанию не позволяют сценариям автоматически создавать новые окна. Разрешить скрипту реагировать только всплывающим окном, когда пользователь нажимает ссылку или кнопку. Поэтому необходимо проверить, успешно ли открывается новое окно.
var popup = window.open();
if (popup === null) {
// 新建窗口失败
}
(2) окно.закрыть()
window.close
Метод используется для закрытия текущего окна, обычно используется только для закрытияwindow.open
способ создания нового окна.
popup.close()
Этот метод действителен только для окон верхнего уровня,iframe
Этот метод недействителен для окон в фреймах.
(3) окно.стоп()
window.stop()
Этот метод точно эквивалентен нажатию кнопки «Стоп» в браузере, которая остановит загрузку таких объектов, как изображения, видео и т. д., которые уже загружены или ожидают загрузки.
window.stop()
окно.moveTo(), окно.moveBy()
window.moveTo()
Метод используется для перемещения окна браузера в указанное положение. Он принимает два параметра, горизонтальное расстояние и вертикальное расстояние от верхнего левого угла окна до верхнего левого угла экрана, в пикселях.
window.moveTo(100, 200)
Приведенный выше код перемещает окно на экран(100, 200)
позиция.
window.moveBy()
метод для перемещения окна в относительное положение. Он принимает два параметра: расстояние по горизонтали для перемещения левого верхнего угла окна вправо и расстояние по вертикали для перемещения вниз в пикселях.
window.moveBy(25, 50)
Приведенный выше код перемещает окно на 25 пикселей вправо и на 50 пикселей вниз.
Чтобы предотвратить злоупотребление этими двумя методами и перемещение окна пользователя по желанию, есть только один случай, когда браузер позволяет скрипту перемещать окно: окно используется сwindow.open()
Метод только что создан и имеет только одну вкладку в окне. В остальных случаях использование двух вышеуказанных способов недопустимо.
окно.resizeTo(), окно.resizeBy()
window.resizeTo()
Метод используется для масштабирования окна до заданного размера.
Он принимает два параметра, первый — масштабируемая ширина окна (outerWidth
свойства, в том числе полосы прокрутки, строки заголовка и т. д.), а второй — высота окна после масштабирования (outerHeight
Атрибуты).
window.resizeTo(
window.screen.availWidth / 2,
window.screen.availHeight / 2
)
Приведенный выше код масштабирует текущее окно до половины ширины и высоты доступной области экрана.
window.resizeBy()
Метод используется для увеличения окна. это сwindow.resizeTo()
Разница в том, что он масштабируется на относительную величину,window.resizeTo()
Необходимо указать масштабированный абсолютный размер.
Он принимает два параметра: первый — это величина горизонтального масштабирования, а второй — величина вертикального масштабирования, оба в пикселях.
window.resizeBy(-200, -200)
Приведенный выше код уменьшает ширину и высоту текущего окна на 200 пикселей.
окно.scrollTo(), окно.scroll(), окно.scrollBy()
window.scrollTo
Метод используется для прокрутки документа до указанной позиции. Он принимает два параметра, представляющих координаты страницы левого верхнего угла окна после прокрутки.
window.scrollTo(x-coord, y-coord)
Он также может принимать объект конфигурации в качестве параметра.
window.scrollTo(options)
объект конфигурацииoptions
Есть три свойства.
-
top
: вертикальная координата верхнего левого угла страницы после прокрутки, то есть координата y. -
left
: горизонтальная координата верхнего левого угла страницы после прокрутки, то есть координата x. -
behavior
: Строка, указывающая способ прокрутки, с тремя возможными значениями (smooth
,instant
,auto
), значение по умолчаниюauto
.
window.scrollTo({
top: 1000,
behavior: 'smooth'
});
window.scroll()
путьwindow.scrollTo()
Псевдоним метода.
window.scrollBy()
Метод используется для прокрутки веб-страницы на заданное расстояние (в пикселях). Он принимает два параметра: пиксели для горизонтальной прокрутки вправо и пиксели для вертикальной прокрутки вниз.
window.scrollBy(0, window.innerHeight)
Приведенный выше код используется для прокрутки веб-страницы вниз на один экран.
Если вместо прокрутки всего документа вы хотите прокрутить элемент, вы можете использовать следующие три свойства и метода.
- Element.scrollTop
- Element.scrollLeft
- Element.scrollIntoView()
window.print()
window.print
Метод выпрыгнет из диалогового окна печати, что имеет тот же эффект, что и пользователь, щелкающий команду «Печать» в меню.
Ниже приведены общие коды кнопок печати.
document.getElementById('printLink').onclick = function () {
window.print();
}
Не настольные устройства (например, мобильные телефоны) могут не иметь возможности печати, и об этом можно судить в данном случае.
if (typeof window.print === 'function') {
// 支持打印功能
}
окно.фокус(), окно.размытие()
window.focus()
Метод активирует окно, давая ему фокус и появляясь перед другими окнами.
var popup = window.open('popup.html', 'Popup Window');
if ((popup !== null) && !popup.closed) {
popup.focus();
}
Сначала проверьте приведенный выше кодpopup
Есть ли еще окно, после подтверждения активации окна.
window.blur()
Способ снятия фокуса с окна.
Запускается, когда текущее окно получает фокусfocus
Событие; срабатывает, когда текущее окно теряет фокусblur
мероприятие.
window.getSelection()
window.getSelection
метод возвращаетSelection
Объект, представляющий текст, который в данный момент выбирает пользователь.
var selObj = window.getSelection();
использоватьSelection
объектtoString
метод для получения выделенного текста.
var selectedText = selObj.toString();
окно.getComputedStyle(), окно.matchMedia()
window.getComputedStyle()
Метод принимает узел элемента в качестве параметра и возвращает объект, содержащий окончательную информацию о стиле для элемента, как подробно описано в главе «Операции с CSS».
window.matchMedia()
метод проверки CSSmediaQuery
Утверждения, подробности см. в главе «Операции CSS».
window.requestAnimationFrame()
window.requestAnimationFrame()
метод сsetTimeout
Аналогично отсрочке выполнения функции. разница заключается в том,setTimeout
должен указать время задержки,window.requestAnimationFrame()
Он откладывается до следующей перерисовки браузера, а следующая перерисовка будет выполнена после выполнения. Перерисовка обычно выполняется один раз каждые 16 мс, но браузер автоматически регулирует эту скорость, например, когда веб-страница переключается на фоновую вкладку,requestAnimationFrame()
исполнение будет приостановлено.
Если функция изменит макет веб-страницы, ее обычно помещают вwindow.requestAnimationFrame()
Он выполняется внутри, что может сэкономить системные ресурсы и сделать эффект веб-страницы более плавным. Потому что медленные устройства будут перекомпоновывать и перерисовывать медленнее, а более быстрые устройства будут иметь более высокую скорость.
Этот метод принимает функцию обратного вызова в качестве параметра.
window.requestAnimationFrame(callback)
В приведенном выше кодеcallback
является функцией обратного вызова.callback
При выполнении его параметр представляет собой высокоточную метку времени, переданную системой (performance.now()
Возвращаемое значение ) в миллисекундах указывает время, прошедшее с момента загрузки веб-страницы.
window.requestAnimationFrame()
Возвращаемое значение представляет собой целое число, которое можно передать вwindow.cancelAnimationFrame()
, используемый для отмены выполнения функции обратного вызова.
Ниже приведенwindow.requestAnimationFrame()
Пример выполнения веб-анимации.
var element = document.getElementById('animate');
element.style.position = 'absolute';
var start = null;
function step(timestamp) {
if (!start) start = timestamp;
var progress = timestamp - start;
// 元素不断向左移,最大不超过200像素
element.style.left = Math.min(progress / 10, 200) + 'px';
// 如果距离第一次执行不超过 2000 毫秒,
// 就继续执行动画
if (progress < 2000) {
window.requestAnimationFrame(step);
}
}
window.requestAnimationFrame(step);
Приведенный выше код определяет веб-анимацию продолжительностью 2 секунды, которая перемещает элемент вправо.
window.requestIdleCallback()
window.requestIdleCallback()
а такжеsetTimeout
Точно так же он также откладывает выполнение функции, но гарантирует, что функция обратного вызова будет отложена до тех пор, пока системные ресурсы не будут простаивать. То есть, если задача не очень критична, можно использоватьwindow.requestIdleCallback()
Отложите его выполнение, чтобы сохранить производительность страницы.
следуетwindow.requestAnimationFrame()
Отличие состоит в том, что последний указывает, что callback-функция будет выполняться при следующем переупорядочении браузера, проблема в том, что ресурсы системы могут не простаивать во время следующего переупорядочения, и не может быть гарантировано его выполнение в течение 16 миллисекунд;window.requestIdleCallback()
Гарантируется, что функция обратного вызова будет выполнена, когда системные ресурсы простаивают.
Метод принимает функцию обратного вызова и объект конфигурации в качестве параметров. Объект конфигурации может указать максимальное время задержки выполнения, если это время пройдет, функция обратного вызова будет выполнена независимо от того, свободны системные ресурсы или нет.
window.requestIdleCallback(callback[, options])
callback
Параметр является функцией обратного вызова. Когда функция обратного вызова будет выполнена, система перейдет вIdleDeadline
объект в качестве параметра.IdleDeadline
объект имеетdidTimeout
свойство (логическое значение, указывающее, является ли вызов тайм-аутом) иtimeRemaining()
метод (возвращает количество миллисекунд, оставшихся в этом периоде простоя).
options
Параметр является объектом конфигурации, в настоящее время толькоtimeout
Свойство, указывающее максимальное количество миллисекунд, на которое функция обратного вызова должна откладывать выполнение. Этот параметр является необязательным.
window.requestIdleCallback()
Метод возвращает целое число. Это целое число может быть передано вwindow.cancelIdleCallback()
Отменить функцию обратного вызова.
Ниже приведен пример.
requestIdleCallback(myNonEssentialWork);
function myNonEssentialWork(deadline) {
while (deadline.timeRemaining() > 0) {
doWorkIfNeeded();
}
}
В приведенном выше кодеrequestIdleCallback()
Используется для выполнения некритичных задачmyNonEssentialWork
. Задача сначала подтверждает, что в этот период простоя осталось время, а затем фактически начинает выполнение задачи.
Уточняется следующееtimeout
пример.
requestIdleCallback(processPendingAnalyticsEvents, { timeout: 2000 });
Приведенный выше код указывает,processPendingAnalyticsEvents
Должен быть выполнен в течение следующих 2 секунд.
Если функция обратного вызова выполняется из-за тайм-аута, тоdeadline.timeRemaining()
вернуть0
,deadline.didTimeout
вернутьtrue
.
Если выполняется несколько разwindow.requestIdleCallback()
, указать несколько функций обратного вызова, то эти функции обратного вызова будут расположены в очереди и выполняться в порядке «первым пришел — первым обслужен».
мероприятие
window
Объекты могут получать следующие события.
событие загрузки и свойство загрузки
load
Событие происходит, когда документ закончил загрузку в окне браузера.window.onload
Свойство может указать функцию обратного вызова для этого события.
window.onload = function() {
var elements = document.getElementsByClassName('example');
for (var i = 0; i < elements.length; i++) {
var elt = elements[i];
// ...
}
};
Приведенный выше код получает указанный элемент и обрабатывает его после загрузки веб-страницы.
событие ошибки и свойство onerror
Срабатывает при возникновении ошибки в скрипте браузераwindow
объектerror
мероприятие. мы можем пройтиwindow.onerror
свойство определяет функцию обратного вызова для этого события.
window.onerror = function (message, filename, lineno, colno, error) {
console.log("出错了!--> %s", error.stack);
};
По историческим причинам,window
изerror
Функция обратного вызова события не принимает объект ошибки в качестве параметра, но может принимать всего пять параметров, и их значения следующие.
- сообщение об ошибке
- URL скрипта с ошибкой
- номер строки
- номер столбца
- объект ошибки
Старые браузеры поддерживают только первые три параметра.
Не все ошибки запускают JavaScripterror
События (т.е. заставить JavaScript сообщить об ошибке). Как правило, это событие вызывается только ошибками в сценарии JavaScript, и такие ошибки, как несуществующий файл ресурсов, не вызываются.
Ниже приведен пример, который отображает предупреждение, если для всей страницы имеется более 3 необработанных ошибок.
window.onerror = function(msg, url, line) {
if (onerror.num++ > onerror.max) {
alert('ERROR: ' + msg + '\n' + url + ':' + line);
return true;
}
}
onerror.max = 3;
onerror.num = 0;
Следует отметить, что если URL-адрес скрипта и URL-адрес веб-страницы находятся в разных доменах (например, если используется CDN), браузер вообще не предоставит подробную информацию об ошибке, а только выдаст сообщение об ошибке. тип — «Ошибка сценария», а номер строки — 0, никакой другой информации. Это то, что браузер предотвращает утечку информации во внешние скрипты. Обходной путь - установить сервер, на котором находится скрипт.Access-Control-Allow-Origin
Информация заголовка HTTP.
Access-Control-Allow-Origin: *
Затем на веб-странице<script>
установить на этикеткеcrossorigin
Атрибуты.
<script crossorigin="anonymous" src="//example.com/file.js"></script>
код вышеcrossorigin="anonymous"
Указывает, что для чтения файла не требуется никакой идентификационной информации, т. е. не требуется никаких файлов cookie и сведений об аутентификации HTTP. Если установленоcrossorigin="use-credentials"
, это означает, что браузер будет загружать файлы cookie и данные аутентификации HTTP, а также необходимо будет открыть информацию заголовка HTTP на стороне сервера.Access-Control-Allow-Credentials
.
Свойство прослушивателя событий объекта окна
В дополнение к интерфейсу GlobalEventHandlers, который есть у узлов элементов,window
Объект также имеет следующие свойства функции прослушивателя событий.
-
window.onafterprint
:afterprint
Функция прослушивания событий. -
window.onbeforeprint
:beforeprint
Функция прослушивания событий. -
window.onbeforeunload
:beforeunload
Функция прослушивания событий. -
window.onhashchange
:hashchange
Функция прослушивания событий. -
window.onlanguagechange
:languagechange
функция слушателя. -
window.onmessage
:message
Функция прослушивания событий. -
window.onmessageerror
:MessageError
Функция прослушивания событий. -
window.onoffline
:offline
Функция прослушивания событий. -
window.ononline
:online
Функция прослушивания событий. -
window.onpagehide
:pagehide
Функция прослушивания событий. -
window.onpageshow
:pageshow
Функция прослушивания событий. -
window.onpopstate
:popstate
Функция прослушивания событий. -
window.onstorage
:storage
Функция прослушивания событий. -
window.onunhandledrejection
: Необработанный объект Promisereject
Функция прослушивания событий. -
window.onunload
:unload
Функция прослушивания событий.
Многооконный режим
Поскольку веб-страница может использоватьiframe
элемент, встроенный в другие веб-страницы, поэтому на веб-странице будет сформировано несколько окон. Если в дочернее окно встроить другую веб-страницу, будет сформировано многоуровневое окно.
ссылка на окно
Скрипты в каждом окне могут ссылаться на другие окна. Браузеры предоставляют некоторые специальные переменные для возврата в другие окна.
-
top
: Окно верхнего уровня, то есть окно верхнего уровня -
parent
:Родительское окно -
self
: Текущее окно, которое само
Следующий код может определить, является ли текущее окно окном верхнего уровня.
if (window.top === window.self) {
// 当前窗口是顶层窗口
} else {
// 当前窗口是子窗口
}
Следующий код возвращает историю доступа родительского окна на один раз назад.
window.parent.history.back();
В соответствии с этими переменными браузер также предоставляет некоторые специальные имена окон дляwindow.open()
метод,<a>
Этикетка,<form>
Этикетки и т.п. цитаты.
-
_top
: Окно верхнего уровня -
_parent
:Родительское окно -
_blank
: новое окно
Следующий код означает открытие ссылки в окне верхнего уровня.
<a href="somepage.html" target="_top">Link</a>
элемент iframe
дляiframe
встроенное окно,document.getElementById
метод, чтобы получить узел DOM окна, а затем использоватьcontentWindow
приобретение собственностиiframe
узел содержитwindow
объект.
var frame = document.getElementById('theFrame');
var frameWindow = frame.contentWindow;
В приведенном выше кодеframe.contentWindow
дочернее окноwindow
объект. Затем, с учетом того же ограничения источника, свойства внутри дочернего окна могут быть прочитаны.
// 获取子窗口的标题
frameWindow.title
<iframe>
элементальcontentDocument
свойства, вы можете получить дочернее окноdocument
объект.
var frame = document.getElementById('theFrame');
var frameDoc = frame.contentDocument;
// 等同于
var frameDoc = frame.contentWindow.document;
<iframe>
Элементы соблюдают политику одного и того же источника.Только когда родительское окно и дочернее окно находятся в одном домене, между ними может использоваться скриптовая связь, в противном случае используйте толькоwindow.postMessage
метод.
<iframe>
Внутри окна используйтеwindow.parent
Относится к родительскому окну. Если текущая страница не имеет родительского окна, тоwindow.parent
Свойство возвращается само. Следовательно, поwindow.parent
Равноwindow.self
Чтобы определить, будь то текущее окноiframe
окно.
if (window.parent !== window.self) {
// 当前窗口是子窗口
}
<iframe>
окноwindow
объект, естьframeElement
имущество, возврат<iframe>
узел DOM в родительском окне. Для невстроенных окон это свойство равноnull
.
var f1Element = document.getElementById('f1');
var f1Window = f1Element.contentWindow;
f1Window.frameElement === f1Element // true
window.frameElement === null // true
Свойство window.frames
window.frames
Свойство возвращает массивоподобный объект, все элементы которого являются дочерними окнами.window
объект. Вы можете использовать это свойство для достижения взаимной ссылки между окнами. Например,frames[0]
Вернитесь к первому дочернему окну,frames[1].frames[2]
Возвращает третье дочернее окно внутри второго дочернего окна,parent.frames[1]
Возвращает второе дочернее окно родительского окна.
Уведомление,window.frames
Значением каждого члена является окно внутри фрейма (т. е. окно фрейма).window
объект), вместоiframe
Узел DOM метки в родительском окне. Если вы хотите получить дерево DOM внутри каждого кадра, вам нужно использоватьwindow.frames[0].document
письма.
Кроме того, если<iframe>
элемент установленname
илиid
атрибут, то значение атрибута автоматически станет глобальной переменной и может быть передано черезwindow.frames
Ссылка на свойство, возвращает дочернее окноwindow
объект.
// HTML 代码为 <iframe id="myFrame">
window.myFrame // [HTMLIFrameElement]
frames.myframe === myFrame // true
Кроме того,name
Значение свойства автоматически станет именем дочернего окна и может использоваться вwindow.open
второй параметр метода или<a>
а также<frame>
помеченtarget
Атрибуты.