Window对象在JavaScript中扮演正非常重要的角色。
下面介绍一些重要的Window属性:
closed
当窗口被关闭时,返回true
defaultStatus、status
在浏览器状态栏中显示的文本
document
对Document对象的引用,该对象代表在窗口中显示的HTML文档(以后将详细介绍)
frames[]
Window对象的数组,代表窗口中的各个框架(如果存在)
history
对History对象的引用,该对象代表用户浏览窗口的历史
location
对Location对象的引用,该对象代表在窗口中显示的文档的URL。设置这个属性会引 发浏览器装载一个新文档
name
窗口的名称。可被HTML标记<a>的target性质使用
opener
对打开当前窗口的Window对象的引用。如果当前窗口被用户打开,则它的值为null
parent
如果当前窗口是框架,它就是对包含这个框架的窗口的引用
self
自引用属性,是对当前Window对象的引用,与window属性同义
top
如果当前窗口是框架,它就是对包含这个框架的顶级窗口的Window对象的引用
window
自引用属性,同self
Window对象的重要方法:
alert() confirm() prompt()
向用户显示简单的对话框,confirm()和prompt()用于获取用户的响应
close()
关闭窗口
focus() blur()
请求或放弃窗口的键盘焦点。focus()方法还通过把窗口提前到堆栈顺序的最前面, 从而确保窗口可见
moveBy() moveTo()
移动窗口
open()
打开新的定义窗口,用指定的特性显示指定的URL
print()
打印窗口或框架中的内容,就像用户点击了窗口工具栏中的Print按钮一样(某些老版 本浏览器不支持此方法)
resizeBy() resizeTo()
调整窗口大小
scrollBy() scrollTo()
滚动窗口中显示的文档
setInterval() clearInterval()
设置或者取消重复调用的函数,该函数在两次调用之间有指定的延迟
setTimeout() clearTimeout()
设置或取消在指定的若干毫秒后要调用一次的函数
Window对象的onerror属性比较特殊,如果给这个属性赋一个函数,那么只要这个窗口中发生JavaScript错误,该函数就会被调用,它就成了窗口的错误处理函数。定义onerror属性方法,如:
window.οnerrοr=method; //注意method为要处理错误调用的函数,不要();
传递给错误处理程序的参数有三个。第一个是描述错误的消息,它可以是"missing operator in expression"()、"self is read-only"()或"myname is not defined"();第二个参数是一个字符串,用来存放引发错误的JavaScript代码所在的文档的URL;第三个参数是文档中发生错误的行代码。
除了参数,onerror处理程序有个重要返回值。当发生错误时,浏览器通常在一个对话框或状态栏中显示错误消息。如果onerror返回true,它通知系统处理程序将处理错误,无需其他操作,系统也就不会显示自己的错误消息。
需要注意:onerror错误处理程序在Netscape6种存在bug。虽然在发生错误的时候会触发指定函数,但传给函数的三个参数不正确,而且不可用。Netscape 6和其他支持JavaScript1.5的浏览器有另外一种捕捉错误的方法——try/catch语句。
Window.navigator属性引用的是包含Web浏览器总体信息的Navigator对象。这个对象是在Netscape Navigator之后命名的,不过IE也支持它,IE还支持属性clientInformation,它是navigator的同义词,但Netsacpe和Mozilla不支持它。以下是Navigator对象的五个重要属:
appName
Web浏览器的简单名称
appVersion
浏览器的版本号和其他版本信息。注意,这个是内部版本号,可能与显示给用户的版本号不一致。
userAgent
浏览器在它的UESR-AGENT HTTP标题中发送的字符串。这个属性通常包含appName和appVersion中的所有信息
appCodeName
浏览器的代码名。Netscape用代码名"mozilla"作为这一属性的值
platform
运行浏览器的硬件平台。这一属性是JavaScript1.2加入的
在JavaScript1.2中,Window对象的screen属性引用Screen对象。Screen对象提供有关用户显示器的大小和可用颜色数量的信息。属性width和height指定的是以像素为单位ide显示器大小,属性availWidth和availHeight指定的是实际可用的显示器大小,排除了像Windows任务栏这样的特性所占的空间。
属性colorDepth指定可以显示的颜色数的以2为底的对数。这个值通常与显示器所使用的每个像素的位数相同。但是某些环境中,浏览器可能对自身的限制,可以显示的是可以颜色的子集。这时,screen.colorDepth的值小于屏幕的每个像素的位数。
Window 对象的open()方法可以打开一个新的浏览器窗口。这个方法有四个可选参数,返回代表新打开窗口的Window对象。open()第一个参数是新窗口的URL,如果被省略则打开窗口;第二个参数是新打开窗口的窗口名,这个名字可以作为<a>标记或<form>标记的target属性的值;第三个参数是特性列表,这些特性声明了窗口的大小和它的GUI装饰(如菜单栏,状态栏,工具栏等);第四个参数只在第二个参数命名的是一个已存在的窗口时才有用,它是一个布尔值,声明由第一个参数指定的URL是应该替换掉窗口浏览器历史的当前项(true),还是应该在窗口浏览历史中创建一个新的项(false),后者是默认设置。
下面是从网上收集的open()方法的各项参数
参数 | 取值范围 | 说明
alwaysLowered | yes/no | 指定窗口隐藏在所有窗口之后
alwaysRaised | yes/no | 指定窗口悬浮在所有窗口之上
depended | yes/no | 是否和父窗口同时关闭
directories | yes/no | Nav2和3的目录栏是否可见
height | pixel value | 窗口高度
hotkeys | yes/no | 在没菜单栏的窗口中设安全退出热键
innerHeight | pixel value | 窗口中文档的像素高度
innerWidth | pixel value | 窗口中文档的像素宽度
location | yes/no | 位置栏是否可见
menubar | yes/no | 菜单栏是否可见
outerHeight | pixel value | 设定窗口(包括装饰边框)的像素高度
outerWidth | pixel value | 设定窗口(包括装饰边框)的像素宽度
resizable | yes/no | 窗口大小是否可调整
screenX | pixel value | 窗口距屏幕左边界的像素长度
screenY | pixel value | 窗口距屏幕上边界的像素长度
scrollbars | yes/no | 窗口是否可有滚动栏
titlebar | yes/no | 窗口题目栏是否可见
toolbar | yes/no | 窗口工具栏是否可见
Width | pixel value | 窗口的像素宽度
z-look | yes/no | 窗口被激活后是否浮在其它窗口之上
在JavaScript1.2中,方法moveTo()可以将窗口的左上角移动到指定坐标。moveBy()方法可以将窗口上下左右移动指定数量的像素。方法resizeTo()和resizeBy()可以按照相对数量和绝对数量调整窗口大小。
方法focus()和blur()提供了对窗口的高级控制。focus()会请求系统将键盘焦点赋予窗口,blur()则会放弃键盘焦点。
方法scrollBy()会将窗口中显示的文档向左右上下滚动指定数量的像素。而scrollTo()会将文档滚动到一个绝对位置。
窗口的location属性引用的是Location对象,它代表该窗口中当前显示的文档的URL。Location对象的href属性是一个字符串,包含完整的URL。其它属性(如protocal、host、pathname和search等)则分别声明了URL的各个部分。
Location对象的search属性,包含的是问号之后的那部分URL,这部分通常是某种类型的查询字符串。(有个提取URL中参数的例子)
Location对象自身也可以被用作一个原始字符串值,它的值与href属性值相同(Location对象有一个相配的toString()方法)。同时还以给窗口的location属性赋值,这样会引起浏览器装载并跳转到相应页面。、
Location对象还支持两种方法给location属性赋值。方法reload()会从Web服务器再次装入当前显示的页面;方法replace()会装载并显示指定的URL,但是它不同于直接将一个URL赋给窗口的location属性,replace()方法会替换浏览器历史列表中的当前URL,而不是在历史列表中创建一个新条目。
需要注意的是Window对象的location属性和Ducoment对象的location属性不同。前者引用一个Location对象,后者只是一个字符串,不具有Location对象的任何特性,document.location同document.URL。在大多数情况下document.location和location.href相同,但是,如果存在服务器重定向,document.location包含的是已经装载的URL,而location.href包含的是原始请求文档的URL。
Window对象的history属性引用的是该窗口的History对象。出于安全因素的考虑,其实脚本不能真正访问History对象中以数组形式存储的窗口的浏览历史(除非用户在Netscape 4和其后的版本中对有签名的脚本进行了授权)。History对象的length属性可以被访问,但它不能提供任何有用信息。
但History对象支持三种方法:方法back()和forward()可以在窗口(或框架)的浏览历史中前后移动,这与客户点击浏览器的Back和Forward按钮作用相同;方法go()有一个整数参数,可以在历史列表中向前或向后跳过多个页。
Window对象的方法open()返回代表新创建的窗口的Window对象,而这个新窗口具有opener属性,该属性可以打开它的原始窗口,从而实现两个窗口的相互引用。而一个窗口中的任何框架都可以使用Window对象的属性frames、parent和top属性来引用其它框架。
我们可以通过name属性给窗口或框架指定一个名字,这个名字可以用作<a>、<map>或<form>的性质的target的值,这样就可以告诉浏览器把激活链接、点击图像或者提交表单的结果显示在哪里。
虽然target和name都是HTML的一部分,与JavaScript无关,但是给框架命名却与JavaScript有关。给框架命名后,我们就可以通过名字,在JavaScript中引用这个框架,如:给一个框架名字<frame name="frmName" src="frm.html">,我们就可以在它的兄弟框架中通过parent.frmName来引用它。
在多窗口或多框架中,我们可以通过parent、top等实现窗口或框架中属性或方法的相互调用。在采用这种方式在框架或创建间共享函数时,词法作用域的规则非常重要,函数在定义它的作用域中执行,而不是在调用它的作用域中执行。所以在函数执行过程中调用的变量是在定义它的作用域中寻找,而不在执行它的作用域寻找。