二、Window对象
上一节讲过,window对象是客户端javascript程序的全局对象。这里介绍一些window对象的属性和方法。
1. 计时器setTimeout()/clearTimeout(), setInterval()/clearInterval()
setTimeout()和setInterval()可以用来注册在指定的事件之后单次或重复调用的函数。
setTimeout()方法用来实现一个函数在指定的毫秒数之后运行,setTimeout返回一个值,这个值可以传递给clearTimeout()用于取消这个函数的执行。
setInterval()会在指定的毫秒数的间隔里重复调用:
setInterval(updateClock, 600000); //每60秒调用一次updateClock()
setInterval也返回一个值,这个值可以传递给clearInterval()用于取消后续函数的调用。
2. 浏览器定位和导航 location
Window对象的location属性引用的是Location对象,它表示该窗口中当前显示的文档的url,并定义了方法来使窗口载入新的文档。Document对象的location属性页引用到Location对象。
window.location === document.location; // 总是返回true
2.1 解析url
Location对象的href属性时一个字符串,包含url的完整文本。Location对象的toString()方法返回href的值,因此在会隐式调用toString()的情况下,可以用location属性代替location.href。
Location对象的其他属性,protocal,host,hostname,port,pathname和search分别表示url的各个部分,他们称为“url分解”属性(这些属性是可写的,也就是可以运算重新赋值)。Location对象的search属性返回的是问号之后的url。
示例:
2.2 载入新的文档 assign(), replace(), reload(), location
Location对象的assign()方法可以使窗口载入并显示指定url中的文档;
replace()也类似,但它在载入新文档之前会从浏览历史中把当前文档删除。如果不删除,“后退”按钮会把浏览器带回到原始文档;
reload()方法可以让浏览器重新载入当前文档。
跳转到新的页面更传统的方法是把新url赋给location属性,会立即跳转到新页面。
上面讲到的这些方法都可以使用相对路径。
3. 浏览器历史 history, back(), forward(), go()
Window对象的history属性引用的是该窗口的History对象。History对象时用来把窗口的浏览历史用文档和文档状态列表的形式表示。出于安全考虑,脚本不能访问已保存的url(如果允许,则任意脚本都可以窥探你的浏览历史)。
History对象的back()和forward()方法与浏览器的后退和前进按钮一样。
Go()接受一个整数参数,在历史列表中向前(正整数)或向后(负整数)跳过任意多个页。
4. 对话框 alert(), confirm(), prompt()和showModelDialog()
Window对象提供了3个方法来向用户显示简单的对话框。
alert()向用户显示一条消息并等待用户关闭对话框。
confirm()也显示一条信息,要求用户点击“确定”或“取消”按钮,并返回一个布尔值。
prompt()也显示一条消息,等待用户输入字符串,并返回那个字符串。
注意:这些对话框显示的都是纯文本,不是html格式的文本。只能使用空格,换行符和各种标点符号来格式化。而且,confirm和prompt都会阻塞,alert也会阻塞,但不总是这样。
还有个更复杂的方法showModelDialog(),显示一个包含html格式的模态对话框(阻塞的对话框),可以给他传入参数,以及从对话框返回值。
5. 错误处理 onerror
Window对象的onerror属性时一个事件处理程序,当未捕获的异常传播到调用栈上时就会调用它,并把错误消息输出到浏览器的javascript控制台上。如果给这个属性赋一个函数,那么只要这个窗口发生了javascript错误就会调用该函数,即它成了窗口的错误处理程序。
Onerror处理程序是早期javascript的遗物,那时语言核心不包含try/catch异常处理语句,现代代码很少使用它。
6. 作为window对象属性的文档元素
如果在html文档中用id属性来为元素命名,并且如果window对象本身没有这个名字的属性,window对象就会以id属性的值来增加一个全局属性,这个属性指向表示文档元素的htmlElement对象。比如,文档包含一个<button id=”okay” />元素,window对象没有名为okay的属性,则新增一个okay属性,通过okay可以引用此button元素。
但是,有一个重要警告:如果window对象有此名字的属性,就不能通过id来应用这个元素了,同样,如果html文档里包含一个id为“x”的元素,并且还在javascript代码中声明并赋值给全局变量x,那么显示声明的变量会隐藏隐式的元素变量。
Id元素在文档中必须是唯一的,两个元素不能有相同的id,但是name属性可以相同。