计时器

setTimeout()和serInterval()可以用来注册在指定的时间之后单词或重复调用的函数。因为他们都是客户端JavaScript中重要的全局函数,所以定义为Window对象的方法,但作为通用函数,其实不会对窗口做什么事情。

Window对象的setTimeout()方法用来实现一个函数在指定的毫秒数之后运行。setTimeout()返回一个值,这个值可以传递给clearTimeout()用于取消这个函数的执行。

setInterval()和setTimeout()一样,只不过这个函数会在指定的毫秒数的间隔里重复调用:

setInterval(updateClock, 60000);//每60秒调用一次updateClock()

和setTimeout()一样,setInterval()也返回一个值,这个值可以传递给clearInterval(),用于取消后续函数的调用。

如果以0毫秒的超时时间来调用setTimeout(),那么指定的函数不会立即执行,相反,会把它放到队列中,等到前面处于等待状态的事件处理程序全部执行完成后,再“立即”调用它。

浏览器定位和导航

Window对象的location属性引用的是Location对象,它表示该窗口中当前现实的文档的URL,并定义了方法来使窗口载入新的文档。

Document对象的location属性也引用到Location对象:

Window.location === document.location //总是返回true

Document对象也有一个URL属性,是文档首次载人后保存该文档的URL静态字符串。如果定位到文档中的片段标识符,Location对象会做相应的更新,而document.URL属性却不会改变。

解析URL

Window对象的location属性引用的是Location对象,它表示该窗口中当前显示的文档的URL。Location对象的href属性是一个字符串,后者包含URL的完整版本。Location对象的toString()方法返回href属性的值,因此会隐式的调用toString()的情况下,可以使用location代替location.href。

Location对象的hash属性返回URL中的“片段标识符”部分。search属性返回的是问号之后的URL,这部分通常是某种类型的查询字符串。

载入新的文档

Location对象的assign()方法可以使窗口载入并显示你指定的URL中的文档。Replace()方法也类似,但它在载入新文档之前会从浏览历史中把当前文档删除。

Reload()方法可以让浏览器重新载入当前文档。

 浏览历史

Window对象的history属性引用的是该窗口的History对象。History对象是用来把窗口的浏览历史用文档和文档状态列表的形式表示。History对象的length属性表示浏览历史列表中的元素数量。

History对象的back()和forward()方法与浏览器的“后退”和“前进”按钮一样:他们使浏览器在浏览历史中前后跳转一格。第三个方法——go()接受一个整数参数,可以在历史列表中向前(正参数)或向后(负参数)跳过任意多个页。

浏览器和屏幕信息

Navigator对象

Window对象的navigator属性引用的是包含浏览器厂商和版本信息的Navigator对象。

  • appName

Web浏览器的全称。

  • appVersion

此属性通常以数字开始,并跟着包含浏览器厂商和版本信息的详细字符串。

  • userAgent

浏览器在它的USER-AGENT HTTP头部中发送的字符串。这个属性通常包含appVersion中的所有信息,并且常常也可能包含其他的细节。

  • Platform

在其上运行浏览器的操作系统的字符串。

  • onLine

Navigator.onLine属性表示浏览器当前是否连接到网络。应用程序可能希望在离线状态下把状态保存在本地。

  • Geolocation

geolocation对象定义用于确定用户地理位置信息的借口。

  • javaEnabled()

一个非标准的方法,当浏览器可以运行Java小程序时返回true。

  • cookieEnable()

非标准的方法,如果浏览器可以保存永久的cookie时,返回true。当cookie配置为“视具体情况而定”时,可能会返回不正确的值。

Screen对象

Window对象的screen属性引用的是Screen对象。它提供有关窗口显示的代谢哦啊和可用的颜色数量的信息。属性width和height指定的是以像素为单位的窗口大小。属性availWidth和availHeight指定的是实际可用的显示大小,它们排除了像桌面任务栏这样的特性所占用的空间。属性colorDepth指定的是显示的BPP(bits-per-pixel)值,典型的值由16、24和32。

对话框

Window对象提供了3个方法来向用户显示简单的对话框。Alert()向用户显示一条消息并等待用户关闭对话框。Confirm()也显示一条消息,要求用户点击“确定”或“取消”按钮,并返回一个布尔值。Prompt()同样也显示一条消息,等待用户输入字符串,并返回那个字符串。showModalDialog(),显示一个包含HTML格式的“静态对话框”,可以给它传入参数,以及从对话框里返回值。showModalDialog()在浏览器当前窗口中显示的一个模态窗口。用这个方法显示的窗口是“模态的”,showModalDialog()直到窗口关闭之前不会返回。当窗口关闭后,window.returnValue属性的值就是此方法返回的值。对话框的HTML内容往往必须包含用来设置returnValue的“确认”按钮,如果需要则调用window.close()。

错误处理

Window对象的onerror属性是一个事件处理程序,当未捕获的异常传播到调用栈上时就会调用它,并把错误消息输出到浏览器的JavaScript控制台。如果给这个属性赋一个函数,那么只要这个窗口中发生了JavaScript错误,就会调用该函数,即它成了窗口的错误处理程序。

 作为Window对象属性的文档元素

如果HTML文档中用id属性来为元素命名,并且如果Window对象没有此名字的属性,Window对象会赋予一个属性,它的名字是id属性的值,而它们的值执行表示文档元素的HTMLElement对象。Window对象是以全局对象的形式存在于作用域链的最上层,这就意味着在HTML文档中使用id属性会成为可以被脚本访问的全局变量。如果文档宝行一个<button id=”okay”/>元素,可以通过全局变量okay来引用此元素。

 多窗口和窗体

一个Web浏览器窗口可能在桌面上包含多个标签页。每一个标签页都是独立的“浏览器上下文”,每一个上下文都有独立的Window对象,而且相互之间不干扰。

打开和关闭窗口

使用Window对象的open()方法可以打开一个新的浏览器窗口(或标签页,这通常盒浏览器的配置选项有关)。Window.open()载入指定的URL到新的或已存在的窗口中,并返回代表那个窗口的Window对象。

Open()的第一个参数是要在新窗口中显示的文档的URL,如果省略,那么会使用空页面的URL about:blank。

Open()的第二个参数是新打开的窗口的名字。如果指定的是一个已存在的窗口的名字,会直接使用已存在的窗口。否则,会打开新的窗口,并将这个指定的名字赋值给它。如果省略次参数,会使用指定的名字“_blank”打开新的、未命名的窗口。

关闭窗口

要显示的使用标示符window,这样可以避免混淆Window对象的close()方法和Document对象的close()方法——如果正在从事事件处理程序调用close(),这很重要。

大多数浏览器只允许自动关闭由自己的JavaScript代码创建的窗口。如果要关闭其他窗口,可以用一个对话框提示用户,要求他对关闭窗口的请求进行确认(或取消)。在标示窗体而不是顶级窗口或标签页上的Window对象上执行close()方法不会有任何消息过,它不能关闭一个窗体。

即使一个窗口关闭了,代表它的Window对象仍然存在,已关闭的窗口会有值为true的closed属性,它的document会使null,它的方法通常也不会再工作。

窗体之间的关系

任何窗口或窗体的JavaScript都可以将自己的窗口和窗体引用为window或self。窗体可以用parent属性引用包含它的窗口或窗体的Window对象。

如果一个窗口时顶级窗口或标签,而不是窗体,那么parent属性引用的就是这个窗口本身:

parent == self; //只有顶级窗口才会返回true

如果一个窗体包含在另一个窗体中,而后者又包含在顶级窗口中,那么该窗体就可以使用parent.parent来引用顶级窗口。top属性是一个通用的快捷方式,无论一个窗体被嵌套了几层,它的top属性引用的都是指向包含它的顶级窗口。

交互窗口中的JavaScript

每个窗口和窗体都是它自身的JavaScript执行上下文,以Window作为全局对象。

在窗体或窗口间共享函数时,牢记词法作用域的规则非常重要。函数在定义它的作用域中执行,而不是在调用它的作用域中执行。