使用window对象

  window对象是整个JavaScript脚本运行的顶层对象。在定义一个全局变量时,该变量是作为window对象的一个属性存在的。看如下代码。

例子
<script type="text/javascript">  
    // 定义全局变量a
    var a = 5;
    // 判断window对象的属性a和全局变量a是否相等
    alert(window.a === a);
    // 为window对象增加属性
    window.book = "疯狂Ajax讲义";
    // 访问全局变量,将输出“疯狂Ajax讲义”
    alert(book);
</script>  

  我们将看到window.a和全局变量a是完全相等的,而且访问全局变量book时,实际上输出的是window的book属性值。
  因此此处必须澄清一个概念:在定义了一个所谓的全局变量后,它仅仅在当前的window对象中具有全局性。如果在同一个页面里有多个Frame,则意味着有多个window对象,且每个window中的全局对象不会互相影响。
  实际上,不仅直接定义的全局变量将以window对象的属性存在,直接定义一个普通函数时,该函数也是作为window对象的方法存在的——也就是说,window对象所包含的方法,JavaScript脚本可以直接调用。window提供了如下几个方法,这些方法可以在JavaScript脚本中直接使用。
  ➢ alert()、confirm()、prompt():分别用于弹出警告对话框、确认对话框和提示输入对话框。
  ➢ close():关闭窗口。
  ➢ focus()、blur():让窗口获得焦点、失去焦点。
  ➢ moveBy()、moveTo():移动窗口。
  ➢ open():打开一个新的顶级窗口,用于装载新的URL所指向的地址,并可指定一系列的新属性,包括隐藏菜单等。
  ➢ print():打印当前窗口或Frame。
  ➢ resizeBy()、resizeTo():重设窗口大小。
  ➢ scrollBy()、scrollTo():滚动当前窗口中的HTML文档。
  ➢ setInterval()、clearInterval ():设置、删除定时器。
  ➢ setTimeout()、clearTimeout():也是设置定时器。推荐使用setInterval()和clearInterval ()。
  除此之外,window对象还提供了如下的常用属性,通过这些属性即可访问window对象包含的一系列对象,例如location、history等。
  ➢ closed:该属性返回一个boolean值,用于判断该窗口是否处于关闭状态。
  ➢ defaultStatus、status:返回浏览器状态栏的文本。
  ➢ document:返回该窗口内装载的HTML文档。
  ➢ frames[]:返回该窗口内包含的Frame对象,每个Frame对象又是一个window对象。
  ➢ history:返回该窗口的浏览历史。
  ➢ location:返回该窗口装载的HTML文档的URL。
  ➢ name:返回该窗口的名字。
  ➢ navigator:返回浏览当前页面的浏览器。
  ➢ parent:如果当前窗口是一个Frame,则该属性返回包含本Frame的窗口,即该Frame的直接父窗口。
  ➢ screen:返回当前浏览者的屏幕对象。
  ➢ self:返回自身。
  ➢ top:如果当前窗口是一个Frame,则该属性指向包含本Frame的顶级父窗口。

访问历史

  window的history属性是一个History对象,该对象表示当前窗口的浏览历史,它支持如下几个方法。
  ➢ back():后退到上一个浏览页面,如果该页面是第一个打开的,则该方法没有任何效果。
  ➢ foward():前进到下一个浏览页面,前提是之前使用了back或go方法。
  ➢ go(intValue):该方法可指定前进或后退多少个页面,其中的intValue控制前进、后退的页面数。其中intValue为正,表示前进;intValue为负,表示后退。

访问页面URL

  window对象还包含一个location属性,该属性可用于访问该窗口或Frame所装载文档的地址。location对象还包含如下几个常用属性。
  ➢ hostname:文档所在地址的主机名。
  ➢ href:文档所在地址的URL地址。
  ➢ host:文档所在地址的主机地址。
  ➢ port:文档所在地址的服务端口。
  ➢ pathname:文档所在地址的文件地址。
  ➢ protocol:装载该文档所使用的协议,例如http:等。

例子
<script type="text/javascript">  
    var loc = window.location;
    var locStr = "当前的location信息是:\n";
    // 遍历location对象的全部属性
    for (var propname in loc)
    {
        locStr += propname + ": " + loc[propname] + "\n"
    }
    alert(locStr);
</script>  

客户机屏幕信息

  window对象有一个screen属性,它返回当前浏览者的屏幕对象,可用于获取用户屏幕当前的大小、色深、屏幕分辨率等参数。该对象的属性也随不同的平台存在变化,但通常会包含如下属性。
  ➢ width:屏幕的横向分辨率。
  ➢ height:屏幕的纵向分辨率。
  ➢ colorDepth:当前屏幕的色深。

例子
<script type="text/javascript">  
    alert(window.screen);
    var str = "当前的屏幕信息是:\n";
    // 遍历screen对象的所有属性
    for(var propname in window.screen)
    {
        str += propname + ": "
            + window.screen[propname] + "\n"
    }
    alert(str);
</script>  

弹出新窗口

  window的open()方法用于打开一个新窗口。结合screen对象的属性,可将打开的窗口放大到满屏,形成满屏效果。

例子
<script type="text/javascript">  
    // 获取当前屏幕的大小
    var width = window.screen.width;
    var height = window.screen.height;
    // 打开一个新的满屏窗口
    window.open("status.html", "_blank", "left=0, top=0, width="
        + width + ", height=" + height 
        + ", toolbar = no, menubar = no, resize = no");
    // 关掉自身
    window.close();
</script>  

确认对话框和输入对话框

  在前面的JavaScript代码中大量使用了alert()方法弹出对话框。实际上,window对象还提供了两种对话框:用于取得用户确认(confirm)的确认对话框和用于获得用户输入(prompt)的输入对话框。
  confirm()方法弹出一个确认对话框,返回一个boolean值。如果用户单击了“确定”按钮,将返回true;如果用户单击了“取消”按钮,则返回false。
  prompt()方法则弹出一个输入对话框,该对话框可获取用户的输入,返回用户输入的内容。

例子
<!DOCTYPE html>  
<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 输入对话框 </title>
</head>  
<body>  
    你的名字是:<span id="name"></span>
    <script type="text/javascript">
        name = prompt("请输入你的名字:" ,"");
        document.getElementById("name").innerHTML = name;
    </script>
</body>  
</html>  

使用定时器

  window提供了如下4个方法来支持定时器。
  ➢ setInterval("code" , interval)、clearInterval (timer):设置、删除定时器。setInterval设置每隔interval毫秒重复执行一次code。
  ➢ setTimeout("code" , interval)、clearTimeout(timer):也是设置定时器。推荐使用setInterval()和clearInterval ()。setTimeout设置在interval毫秒延迟后执行一次code。
  如果需要让一段代码、一个JavaScript函数以固定频率重复执行,则应该使用setInterval()函数;如果需要让一段代码、一个JavaScript函数在指定延迟后仅仅执行一次,则应该使用setTimeout()函数。

例子
<!DOCTYPE html>  
<html>  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
    <title> 使用定时器 </title>
</head>  
<body onload="setTime();">  
    <span id="tm"></span>
    <script type="text/javascript">
        // 定义定时器变量
        var timer;
        // 保存页面运行的起始时间
        var cur = new Date().getTime(); 
        var setTime = function()
        {
            // 在tm元素中显示当前时间
            document.getElementById("tm").innerHTML = 
                new Date().toLocaleString();
            // 如果当前时间比起始时间大于60秒,停止定时器的调度
            if (new Date().getTime() - cur > 60 * 1000)
            {
                // 清除timer定时器
                clearInterval(timer);
            }
        }
        // 指定每隔1000毫秒执行setTime()函数一次
        timer = setInterval("setTime();" , 1000);
    </script>
</body>  
</html>  

注:本博客内容节选自李刚编著的疯狂HTML 5/CSS 3/JavaScript讲义 ,详细内容请参阅书籍。