现在的位置: 首页 > 综合 > 正文

JavaScript 学习笔记(二)

2013年06月02日 ⁄ 综合 ⁄ 共 4902字 ⁄ 字号 评论关闭

JavaScript 学习笔记(二)

 

彭建军

2005-01-18

根据网上收集的文章整理

创建新的 window (窗口) 对象

你有时需要打开一个新的浏览器窗口,用来显示信息或广告,但是在这里我要提醒你一下,大部分人在浏览一个网站的时候,是不会注意弹处的新窗口里边写些什么,他们会很快地关掉窗口,只有少数的人会留意这些弹出的窗口。然而,这项技术还是很不错的。

 

弹出窗口的小测试

在这个 在线示例 中,我们给出一个小测试问题的列表,对应于每一个问题都一个显示答案的超链接,而这些超链接将会弹出一个小窗口来显示答案,看一看代码就清楚了。

 

实际上,每一个答案的超链接都调用了同一个函数 showAnswer(),通过传递的参数 url (此参数是答案所在的页面的地址 URL) 的不同,在弹出的小窗口中显示不同的页面;在这个函数中使用了 window.open() 方法来创建新的窗口:

 

function showAnswer(url) {

  window.open(url, "answer", "height=100,width=100,directories=no," +

                             "location=no,menubar=no," +

                             "resizeable=no,status=no,toolbar=no");

  return false;

}

 

open() 方法有三个参数:打开窗口中的页面地址 URL (包括路径和文件名),给新窗口取的一个英文名字,打开的窗口的一些属性设置 (如窗口的高度、宽度、是否显示滚动条、是否显示浏览器的菜单栏等等)

 

新窗口的名字在某些时候可能会用到,在别的窗口中使用 TARGET="新窗口的名字" 使超链接所链接的页面在新窗口中显示,描述窗口特性的参数是一个包含关键字和关键字值的字符串,各个关键字之间使用英文逗号 (,) 隔开,使用这个参数的时候一定要小心,各个关键字、关键字值、逗号之间千万不要有空格。

 

注意:此例中的 + 好只是为了代码能够换行书写才加上的,其实它们只是连结字符串而已,没有别的,不使用 + 好一样是可以的。

 

窗口特性 (即是打开的浏览器的样子) 的关键字、关键字值可以参考下表:

 

是否显示工具栏:toolbar[=yes|no]|[=1|0]

是否显示地址栏:location[=yes|no]|[=1|0]

是否显示前进、后退、刷新按钮:directories[=yes|no]|[=1|0]

是否显示状态栏:status[=yes|no]|[=1|0]

是否显示菜单栏:menubar[=yes|no]|[=1|0]

是否显示滚动条:scrollbars[=yes|no]|[=1|0]

用户是否可以改变窗口的大小:resizable[=yes|no]|[=1|0]

是否在新窗口中保留浏览器的浏览历史纪录:copyhistory[=yes|no]|[=1|0]

窗口的宽度 (单位为像素)width=pixels

窗口的高度 (单位为像素)height=pixels

如果在字符串中给定了这些值的话,窗口就会按你定义的现实,否则将会使用默认的值,想要进一步了解这方面的信息请参考 Netscape's JavaScript Guide

给窗口指定页面

当你使用上面的方法创建了一个新窗口之后,你还可以再次给这个窗口指定新的页面,这就要用到 open() 方法的返回值了,请看下边的代码:

 

myWin = window.open(url, "", "height=100,width=100");

...

myWin.location = "newpage.html";

 

上边的代码将打开的新窗口的页面重新指定为 newpage.html,这样窗口中就会显示页面 newpage.html 了。同时,在打开的新窗口中,你也可以通过使用 window 对象的 opener 属性将窗口对象指向打开此窗口的母窗口,这样也就可以对母窗口的数据或函数进行操作了,例如下边的代码中就是将母窗口的页面重新指定为 newpage.html

 

window.opener.location = "newpage.html";

关闭一个窗口

再让我们看一下前边的 在线示例 中我们所打开的新窗口,你会窗口中没有菜单栏,那我们该如何将此窗口关掉呢?不用担心,我们可以使用 window 对象的 close() 方法来关闭打开的小窗口,那个 “关闭窗口!” 按钮中就是使用了此方法:

 

<form>

<input type=submit value="关闭此窗口" onClick="window.close(); return false;">

</form>

 

当你按下按钮后,就会触发 onClick 事件,从而调用 window 对象的 close() 方法,此方法将当前的窗口关闭掉。

 

处理 frame [] 对象

 

正如我们在前边的章节中提到的那样,frame 帧其实是单独的窗口,它对应于单独的窗口对象,有自己的 locationhistory document 属性。

 

在这个 在线示例 中你将会看到一系列的帧,代码如下:

 

<html>

<head>

<title></title>

</head>

 

<frameset rows="300,*">

  <frame name="a" src="example3-2a.html">

  <frameset cols="33%,33%,33%">

    <frame name="b" src="example3-2b.html">

    <frame name="c" src="example3-2c.html">

    <frame name="d" src="example3-2d.html">

  </frameset>

</frameset>

 

</html>

 

 

至于帧的结构、帧是如何分布的等等问题这里就不多讲了,我们希望你能查看一下例子中的源代码,你会发现帧 A 中有一个名为 setFrameColor() 的函数,它的作用是用来改变帧 B、帧 C、帧 D 的背景色,参数 fname 为目标帧的名字,参数 color 为目的背景颜色:

 

function setFrameColor(fname, color) {

 

  window.parent.frames[fname].document.bgColor = color;

  return false;

}

 

正如前边例中所演示的那样,BCD 帧的背景颜色确确实实被 document.bgColor 改变了,这里头最重要的是对帧对象的指定,这也是 window.parent.frames[fname] 的作用了,如果参数 fname 的值为 B,则改变帧 B 的颜色。

 

我们通过当前帧 ( A) window.parent 属性指定到顶部的帧 (frameset,此帧包含了ABCD四个帧) ,然后通过顶部帧的 frames 数组加上帧的名字 fname 指定目标帧 ( BCD),最后通过目标帧的 document.bgColor 属性改变该帧的背景色。

引用别的帧/窗口的变量和函数

你不只是可以引用别的帧/窗口的 documentwindow 对象,而且还可以访问使用别的帧/窗口的变量和函数。

 

现在我们将上边的例子修改一下,请看 在线示例 。在新的例子中,我们给下边的三个帧都加了一个按钮,用来恢复各个帧的默认背景色,按下这些按钮后,将会调用帧 A 中的函数 setFrameColor()。下边就是调用帧 A setFrameColor() 函数的代码:

 

window.parent.frames["A"].setFrameColor(window.name, "#ffffff");

 

正如你所看到的,我们使用了与前边一样的技巧。首先使用 window.parent 指向顶层的帧 (frameset),然后使用 frames["A"] 指向帧 A,然后在后边加上帧 A 中的函数 setFrameColor(),并且加上两个参数,这样就可以运行帧 A 中的函数了。

 

需要注意的是函数 setFrameColor() 中使用的类似 window.name 的语句,这个名字和 frames[] 数组中使用的是相同的名字,同时这个名字还是 <FRAME> 标记中通过 NAME="帧的英文名" 设置的名字。

 

类似地,你也可以使用相同的方法使用别的窗口/帧里边的全局变量,只需要将上边例中的函数名改成全局变量名即可。

window 对象的 location history 属性

window 对象的 location 属性包含了当前页面的地址 (URL) 信息,你可以直接改变此属性值,将其设置成新的地址 (URL)

 

window.location = "http://www.yahoo.com";;;

或者

location = "http://www.yahoo.com";;;

 

你还可以通过下边的两种方法中的任何一种来使浏览器从服务器上下载 (Load) 页面:

 

reload() - 促使浏览器重新下载当前的页面,也就是“刷新”当前页面了。

replace(URL) - 促使浏览器根据 URL 参数中给出的地址 (URL) 下载页面,同时在当前浏览器存储的历史记录 (即所浏览过的页面的列表) 中使用新的地址(即此方法中的 URL 参数) 覆盖当前的页面。

使用 replace() 方法意味着用户将不能通过按 “返回” 按钮回到前边浏览过的那个页面,但这并不是说用户完全不能回到原来的所有页面,他们只不过是无法回到被 replace() 方法替换的那一个页面 (注意:只是被替换的那一个页面)

 

表面上看起来这种方法并不是很有用,而且好像还有点令人讨厌,但是,在一些特殊的情况下这种方法却是很有用的。看看这个 在线示例 就知道了,此例中使用 setTimeout() 方法每个三秒钟就下载一个新的页面,让程序运行一段时间,然后点击浏览器的 “后退” 按钮,你会看到浏览器的历史记录,好多好多,你再试着通过鼠标点击回到开始的页面,怎么样,回去了吗?好像比较麻烦,因为有一大堆的页面在那里挡着。

 

想要解决这个问题可以使用 replace() 方法,看一下这个改进后的 在线示例 就知道了,新的例子中,你只需点击一次 “后退” 按钮即可以回到最初的页面了。

history 对象

history 对象是一个很有用的对象,此对象记录着浏览器所浏览过的每一个页面,这些页面组成了一个历史记录列表。history 对象具有两种方法:

 

forward() - 将历史记录向前移动一个页面;

back() - 将历史记录向后移动一个页面;

而还有一个 go() 方法也可以控制历史纪录,而且功能更加强大,使用此方法需要一个参数,这个参数值可以是正负整数、零和字符串,例如 history.go(-2) 将是当前页后退两页;如果给定的参数是字符串,那么浏览器就会搜索列表,找到最接近当前页面位置的并且地址 URL 中含有此字符串的页面,然后转到该页面。

 

请看,下边的两条语句是等价的:

 

history.go(-1);

history.back();

 

下边的代码将页面转到距离本页面位置最近的同时页面地址 URL 中含有字符串 "netscape" (不区分字母的大小写)  的页面:

 

history.go("netscape");

 

在使用这三个方法的时候,如果没有找到符合条件的历史记录的话,将不会发生任何变化,不会改变当前的页面,也不会显示错误。

 

小技巧:如果在你的网站中有很多页面,那么提供一个 “返回” 功能是很必要的,这样可以方便用户浏览你的网站,但是你并不知道用户是从哪一个页面来到当前页面的,于是你就不能使用 <A HREF="页面的地址">...</A> 的方式来做超链接了,但是可以使用下边的代码来做 “返回” 的超链接:

 

<a href="#" onClick="history.back(); return false;">返回</a>

改变窗口页面的内容

你可以使用 window 对象的 scroll() 方法使窗口/帧的内容滚动,这种滚动可以是水平方向的也可以是垂直方向的,在这个 在线示例 中,帧里边的美国各个城市天气变化的内容将会不停的滚动。

 

此例中,当页面

抱歉!评论已关闭.