使用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讲义 ,详细内容请参阅书籍。