浏览器里面,window
对象指当前的浏览器窗口。它是当前页面的顶层对象,即最高一层的对象,所有其他对象都是它的下属。
a = 1;
window.a
// 1
// 上述代码中a是一个没有声明就直接赋值的变量,则自动默认为顶层对象的属性
window 对象的属性
window.name
//该属性是一个字符串(若写入值不是字符串会自动转为字符串),表示当前浏览器窗口的名字
window.name = 'Hello World!';
console.log(window.name)
// "Hello World!"
只要浏览器窗口不关闭,这个属性是不会消失的。在同一浏览器窗口的新页面可以访问到上一个网页设置的window.name属性,但浏览器关闭后属性值就会消失。
window.closed
//该属性返回一个布尔值,表示窗口关闭(false)
window.closed // false
//该属性一般用来检查,使用脚本的新窗口是否关闭
var popup = window.open();
if ((popup !== null) && !popup.closed) {
// 窗口仍然打开着
}
window.opener
//该属性表示打开当前窗口的父窗口。若没有父窗口,则返回null
window.open().opener === window
// true
//若两个窗口之间不需要通信,可将子窗口的opener属性设为null
var newWin = window.open('example.html', 'newWindow', 'height=400,width=400');
newWin.opener = null;
通过opener
属性,可以获得父窗口的全局属性和方法,但只限于两个窗口同源的情况,且其中一个窗口由另一个打开。<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
window.frames
属性返回一个类似数组的对象,成员为页面内所有框架窗口,包括frame
元素和iframe
元素。window.frames[0]
表示页面中第一个框架窗口。
如果iframe
元素设置了id
或name
属性,那么就可以用属性值,引用这个iframe
窗口。比如<iframe name="myIFrame">
可以用frames['myIFrame']
或者frames.myIFrame
来引用。
//frames属性是window对象的别名,frame[0]等同于window[0]
frames === window // true
//从语义上看,相比于window,frames更加清晰
window.length
//该属性返回当前页面所包含的框架总数,若当前网页不包含frame和iframe元素,则返回值为0
window.frames.length === window.length // true
window.frameElement
window.frameElement
属性主要用于当前窗口嵌在另一个网页的情况(嵌入<object>
、<iframe>
或<embed>
元素),返回当前窗口所在的那个元素节点。如果当前窗口是顶层窗口,或者所嵌入的那个网页不是同源的,该属性返回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.top
属性指向最顶层窗口,主要用于在框架窗口(frame)里面获取顶层窗口。
window.parent
属性指向父窗口。如果当前窗口没有父窗口,window.parent
指向自身。
if (window.parent !== window.top) {
// 表明当前窗口嵌入不止一层
}
对于不包含框架的网页,这两个属性等同于window
对象。
window.status
window.status
属性用于读写浏览器状态栏的文本。但是,现在很多浏览器都不允许改写状态栏文本,所以使用这个方法不一定有效。
window.devicePixelRatio
window.devicePixelRatio
属性返回一个数值,表示一个 CSS 像素的大小与一个物理像素的大小之间的比率。也就是说,它表示一个 CSS 像素由多少个物理像素组成。它可以用于判断用户的显示环境,如果这个比率较大,就表示用户正在使用高清屏幕,因此可以显示较大像素的图片。
位置大小属性
以下属性返回window
对象的位置信息和大小信息。
(1)window.screenX,window.screenY
window.screenX
和window.screenY
属性,返回浏览器窗口左上角相对于当前屏幕左上角的水平距离和垂直距离(单位像素)。这两个属性只读。
(2) window.innerHeight,window.innerWidth
window.innerHeight
和window.innerWidth
属性,返回网页在当前窗口中可见部分的高度和宽度,即“视口”(viewport)的大小(单位像素)。这两个属性只读。
用户放大网页的时候(比如将网页从100%的大小放大为200%),这两个属性会变小。因为这时网页的像素大小不变(比如宽度还是960像素),只是每个像素占据的屏幕空间变大了,因此可见部分(视口)就变小了。
注意,这两个属性值包括滚动条的高度和宽度。
(3)window.outerHeight,window.outerWidth
window.outerHeight
和window.outerWidth
属性返回浏览器窗口的高度和宽度,包括浏览器菜单和边框(单位像素)。这两个属性只读。
(4)window.scrollX,window.scrollY
window.scrollX
属性返回页面的水平滚动距离,window.scrollY
属性返回页面的垂直滚动距离,单位都为像素。这两个属性只读。
注意,这两个属性的返回值不是整数,而是双精度浮点数。如果页面没有滚动,它们的值就是0
。
举例来说,如果用户向下拉动了垂直滚动条75像素,那么window.scrollY
就是75左右。用户水平向右拉动水平滚动条200像素,window.scrollX
就是200左右。
if (window.scrollY < 75) {
window.scroll(0, 75);
}
上面代码中,如果页面向下滚动的距离小于75像素,那么页面向下滚动75像素。
(5)window.pageXOffset,window.pageYOffset
window.pageXOffset
属性和window.pageYOffset
属性,是window.scrollX
和window.scrollY
别名。
组件属性
window.locationbar
:地址栏对象window.menubar
:菜单栏对象window.scrollbars
:窗口的滚动条对象window.toolbar
:工具栏对象window.statusbar
:状态栏对象window.personalbar