Window对象

window对象是客户端JavaScript程序的全局对象,包含多数的属性和方法。

计时器

Window对象包含2个方法可以进行计时操作:

  • setTimeout()用来注册在指定的时间后单次调用的函数,返回一个值,这个值可以传递给clearTimeout()用于取消函数的执行。
  • setInterval()用来注册在指定时间后重复调用的函数,返回一个值,这个值可以传递给clearInterval()用于取消后续函数的调用。

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

浏览器定位 location

window对象的location属性引用的是Location对象,它表示该窗口中当前显示的文档的URL。
Document对象的Location属性也引用到Location对象:

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

解析URL

Location对象包含一些属性:protocol, host, hostname, port, pathname和search,分别表示URL的各个部分。hash属性返回URL中的"片段标识符"(#top)部分,search属性返回的是问号之后的URL,这部分通常是某种类型的查询字符串。
比如,提取URL的搜索字符串中的参数:

function urlArgs() {
    var args  = {};
    // 查找到查询串,并去掉'?'
    var query = location.search.substring(1);
    var pairs = query.split("&");
    for(var i=0; i < pairs.length; i++) {
        var pos = pairs[i].indexOf('=');
        if(pos == -1) continue;
        var name  = pairs[i].substring(0, pos);
        var value = pairs[i].substring(pos + 1);
        value = decodeURIComponent(value);
        args[name] = value;
    }
    
    return args;
}

载入新的文档

  • Location对象的assign()方法可以使窗口载入并显示你指定的URL中的文档。
  • replace()方法也类似,但是它在载入新文档之前会从浏览器历史中把当前文档删除。所有如果检测到用户浏览器不支持某些特性来显示功能齐全的版本,可以用location.replace()来载入静态的HTML版本,防止"后退"按钮把浏览器带回到原始文档。
  • 可以直接给location进行赋值实现页面的跳转:
location = "http://www.example.com";    // location直接赋值实现跳转

如果将片段标识赋值给location,则不会让浏览器载入新文档,只会使它滚动到文档的某个位置。

location = "#top";  // 跳转到文档的顶部

同时,location的分解属性是可写的,对它们重新赋值也会改变URL的位置。

location.search = "?page=" + (pagenum + 1); // 载入下一个页面

浏览历史

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

  • History对象的length属性表示浏览历史列表中的元素数量,但出于安全考虑,脚本不能访问已保存的URL。
  • History对象的back()和forward()方法与浏览器的"后退"和"前进"按钮一样。
  • History对象还包含一个go()方法,可以在历史列表中向前或向后跳过任意多个页。
history.go(-2); // 后退2个历史记录,相当于单击"后退"按钮2次

注:如果窗口包含多个子窗口(比如