Navigator 对象

BACKWARDFORWARD



使用Navigator对象

当向Navigator装载一页时, Navigator就创建了一些与该页、该页的内容及其它相关信息对应的对象.

每页(page)上一般要有下述对象:

document对象的属性大部分是与内容相关的(content-dependent),也就是说,这些对象是基于文档的内容而创建的. 如, document对象为文档中的每个form和anchor设置了一个属性.

如, 创建一个名为simple.html的页,该页的HTML如下:

<TITLE>A Simple Document</TITLE>
<BODY><FORM> NAME ="myform" ACTION ="FormProc()" METHOD="get">Enter a value:
<INPUT TY Check if you want:
<INPUT TYPE="checkbos" NAME="Check1" CHECKED onClick="update(this.form)"> Option #1
<P>
<INPUT TYPE="button" NAME="Button1" VALUE='Press Me"onClik="update(this.form)">
</FORM></BODY>

则会产生window, location, history和document对象,这些对象有下述属性:

这些取值仅是一个例子.实际上,这些值取决于真正文档的位置,标题,前景,背景颜色等.

Navigator 还将根据页的内容创建下述的对象:

这时,对象应有下述属性:

注意: 上例中,每个属性的引用都是以document开始,然后是form的名称myform, 再是属性名或者form元素的名称.这个顺序遵循了Navigator对象的层次结构.


Navigator对象的层次结构

各Navigator对象之间存在着层次关系,这种层次性反映了HTML页自身的层次结构. 虽然你不能根据这些对象推知对象类(在Java中可以),但是理解Navigator中JavaScript类的层次属性仍是有益的. 由于这种层次性涉及的是各个对象的实例,而不是对象的类, 所以在严格的面向对象的观念中,被称为实例层次性.

在这种层次性中,对象的"后代"是指此对象的属性.例如: 一个名为form1d的form是一个对象,它同时也是document对象的一个属性,记作document.form1. Navigator 的层次关系如下:

navigator

window
|
+--parent, frames, self, top
|
+--location
|
+--history
|
+--document
|
+--forms
|   |
|  elements (text fields, textarea, checkbos, password
|         radio, select, button,submit,reset)
+--links
|
+--anchors

为了引用对象的某些属性,需要指明该对象的名称和它所有的祖先.
特例:不需要包括window对象.


JavaScript 和 HTML Layout

要想在Navigator中正确使用JavaScript, 就要对Navigator怎样处理layout有一个基本了解, layout是指从枯燥的HTML文本规程到计算机上图形显示的转换. 一般说来, layout是被Navigator顺序处理的, Navigator 从 HTML文件的顶部开始, 一边计算怎样把输出显示在屏幕上, 一边依次向后处理. 这样, Navigator从HTML文档的HEAD部分开始, 然后再从BODY的顶部开始依次处理.

由于这种"自顶向下"的做法, JavaScript只能反映出它已经遇到过的HTML. 例如, 假定你定义了一个具有两个文本输入元素的form, 则这两个元素由 JavaScript 的两个对象document.statform.username和document.statform.userage来反映. 你能在form被定义之后的任何位置使用它, 而不能在form被定义之前使用它. 如, 在一个脚本里, 在定义了form之后, 可以显示这些对象的值:

<SCRIPT>
document.write(document.statform.username.value)
document.write(document.statform.userage.value)
</SCRIPT>

但是,如果想在定义form之前这样做(如,在此HTML页中,在定义这个form前面),就会导致错误. 因为Navigator中,尚不存在这些对象.

类似地,一旦layout已经被显示出来,再设置某个属性值,既不能改变其值,也不会改变显示情况.例如, 假如你的文档标题定义如下:

<TITLE>My JavaScript Page</TITLE>

则在JavaScript中"My JavaScript Page"被作为document.title的值.一旦Navigator已经在layout中把它显示出来(此例中,显示在Navigator窗口的标题条中),就不能再在JavaScript中改变这个值.所以,若该页的后面部分有下述脚本:

document.title="The New Improved JavaScript Page"

不能改变document.title的值,也不会改变页的外观,也不会产生错误.


重要的 Navigator 对象

最有用的Navigator对象有document,form和window.

使用 document 对象

document 对象很重要,因为它的两个方法(method)write和writeln能生成HTML.借助这两个方法, 可以向用户显示JavaScript表达式. 二者的区别在于writeln在行尾加了一个回车,但是由于HTML忽略回车,所以这一点差别只对预定义格式文本(preformatted text)有影响.如,PRE标记内部的文本.

document对象还有两个事件处理程序, onLoad和onUnload, 以便当用户初次装载页或是退出页时完成一些功能.

每个页中只有一个document对象,它是该页内所有form, link, anchor对象的祖先.

使用form对象

Navigator为文档内的每个框架创建一个form对象.可以用NAME属性给form命名,方法如下:

<FORM NAME="myform">
<INPUT TYPE="text" NAME="quantity", onChange="...">
...
</FORM>

这样就产生了一个基于此框架的名为myform的JavaScript对象.这个form中有一个属性对应着text对象. 你可以用下述办法引用这个text对象.

document.myform.quantity

你还可以这样引用text对象的属性value.

document.myform.quantity.value

一个文档内的所有form存放在名为forms的数组中, 第一个form(在该页最顶部)记为form[0],第二个为form[1],依次类推.所以前面引用还可以记为:

document.forms[0].quantity
document.forms[1].quantity.value

类似地, form内的各元素, 如文本域,无线按钮等等, 均存在数组element中.

使用window对象

window对象是浏览器(Navigator)中所有其它对象的"父对象".在引用窗口的属性和方法时,可以省略window对象的名字.

window对象的下述几个方法(method)很有用,可以用来创建新的窗口和弹出式对话框:

window对象的属性对应于frameset内的所有frame, 这些frame存放在frameset中frameset中包含同一窗口中各个子frame的入口.例如,若一个窗口中有三个子frame, 这些子frame就用window.frame[0], window.frame[1] 和 window.frame[2]表示.

属性status用于设置位于客户窗口底部状态栏内的信息.


Copyright: NPACT BACKWARDFORWARD