检测浏览器的版本、所支持的MIME类型、已安装的外挂程序(plug-in)。该对象包含两个子对象:外挂对象、MIME类型对象。
Navigator对象的属性:
格式: navigator.属性
appCodeName 代码
appName 名称
appVersion 版本
language 语言
mimeType 以数组表示所支持的MIME类型
platform 编译浏览器的机器类型
plugins 以数组表示已安装的外挂程序
userAgent 用户代理程序的表头
例1:
<>
with (document) {
write ("你的浏览器信息:<OL>");
write ("<LI>代码:"+navigator.appCodeName);
write ("<LI>名称:"+navigator.appName);
write ("<LI>版本:"+navigator.appVersion);
write ("<LI>语言:"+navigator.language);
write ("<LI>编译平台:"+navigator.platform);
write ("<LI>用户表头:"+navigator.userAgent);
}
</>
例2:
<>
if (all) {
write("你的浏览器是:MSIE");
} else {
write("你的浏览器是:Navigator");
}
</>
plugin对象的属性:
格式: navigator.plugins.属性
deion 外挂程序模块的描述
filename 外挂程序模块的文件名
length 外挂程序模块的个数
name 外挂程序模块的名称
例:
<>
var len = navigator.plugins.length;
with (document) {
write ("你的浏览器共支持" + len + "种plug-in:<BR>");
write ("<TABLE BORDER>")
write ("<CAPTION>PLUG-IN 清单</CAPTION>")
write ("<TR><TH> <TH>名称<TH>描述<TH>文件名")
for (var i=0; i<len; i++)
write("<TR><TD>" + i +
"<TD>" + navigator.plugins[i].name +
"<TD>" + navigator.plugins[i].deion +
"<TD>" + navigator.plugins[i].filename);
}
</>
mimeType对象的属性:
格式:navigator.mimeTypes.属性
deion MIME类型的描述
enablePlugin 对应到哪个外挂模块
length MIME类型的数目
suffixes MIME类型的扩展名
type MIME类型的名称
例:
<>
var len = navigator.mimeTypes.length;
with (document) {
write ("你的浏览器共支持" + len + "种MIME类型:");
write ("<TABLE BORDER>")
write ("<CAPTION>MIME type 清单</CAPTION>")
write ("<TR><TH> <TH>名称<TH>描述<TH>扩展名<TH>附注")
for (var i=0; i<len; i++) {
write("<TR><TD>" + i +
"<TD>" + navigator.mimeTypes[i].type +
"<TD>" + navigator.mimeTypes[i].deion +
"<TD>" + navigator.mimeTypes[i].suffixes +
"<TD>" +
navigator.mimeTypes[i].enabledPlugin.name);
}
}
</>
=============
当向Navigator装载一页时, Navigator就创建了一些与该页、该页的内容及其它相关信息对应的对象.
每页(page)上一般要有下述对象:
window: 最顶层的对象, window的属性对应于整个窗口,在多 文档中(s document), 每个子窗口都对应一个window对象.
location: 其属性对应于当前URL.
history: 其属性对应于用户曾经访问过的URL.
document: 其属性对应于当前文档的内容,如标题、背景色和form等.
document对象的属性大部分是与内容相关的(content-dependent),也就是说,这些对象是基于文档的内容而创建的. 如, document对象为文档中的每个form和anchor设置了一个属性.
如, 创建一个名为simple.html的页,该页的HTML如下:
<TITLE>A Simple Document</TITLE>
<BODY><FORM> NAME ="myform" ACTION ="FormProc()" METHOD="get">Enter a :
<INPUT TY Check if you want:
<INPUT TYPE="checkbos" NAME="Check1" CHECKED ="update(this.form)"> Option #1
<P>
<INPUT TYPE="button" NAME="Button1" ='Press Me"onClik="update(this.form)">
</FORM></BODY>
则会产生window, location, history和document对象,这些对象有下述属性:
location.href="http://www.terrapin.com/samples/vsimple.html"
tile="A Simple Document"
fgColor=#000000
bgColor=#ffffff
history.lenth=7
这些取值仅是一个例子.实际上,这些值取决于真正文档的位置,标题,前景,背景颜色等.
Navigator 还将根据页的内容创建下述的对象:
myform
myform.Check1
myform.Button1
这时,对象应有下述属性:
myform.action=http://terapin/mocha/formproc()
myform.method=get
myform.lenth=5
myform.Button1.=Press Me
myform.Button.name=Button1
myform.text1.=blahblah
myform.text1.name=text1
myform.Check1.defaultChecked=true
myform.Check1.=on
myform.Check1.name=Check1
注意: 上例中,每个属性的引用都是以document开始,然后是form的名称myform, 再是属性名或者form元素的名称.这个顺序遵循了Navigator对象的层次结构.
--------------------------------------------------------------------------------
Navigator对象的层次结构
各Navigator对象之间存在着层次关系,这种层次性反映了HTML页自身的层次结构. 虽然你不能根据这些对象推知对象类(在Java中可以),但是理解Navigator中Java类的层次属性仍是有益的. 由于这种层次性涉及的是各个对象的实例,而不是对象的类, 所以在严格的面向对象的观念中,被称为实例层次性.
在这种层次性中,对象的"后代"是指此对象的属性.例如: 一个名为form1d的form是一个对象,它同时也是document对象的一个属性,记作form1. Navigator 的层次关系如下:
navigator
window
|
+--parent, s, self, top
|
+--location
|
+--history
|
+--document
|
+--forms
| |
| elements (text fields, textarea, checkbos, password
| radio, select, button,submit,reset)
+--links
|
+--anchors
为了引用对象的某些属性,需要指明该对象的名称和它所有的祖先.
特例:不需要包括window对象.
--------------------------------------------------------------------------------
Java 和 HTML Layout
要想在Navigator中正确使用Java, 就要对Navigator怎样处理layout有一个基本了解, layout是指从枯燥的HTML文本规程到计算机上图形显示的转换. 一般说来, layout是被Navigator顺序处理的, Navigator 从 HTML文件的顶部开始, 一边计算怎样把输出显示在屏幕上, 一边依次向后处理. 这样, Navigator从HTML文档的HEAD部分开始, 然后再从BODY的顶部开始依次处理.
由于这种"自顶向下"的做法, Java只能反映出它已经遇到过的HTML. 例如, 假定你定义了一个具有两个文本输入元素的form, 则这两个元素由 Java 的两个对象statform.username和statform.userage来反映. 你能在form被定义之后的任何位置使用它, 而不能在form被定义之前使用它. 如, 在一个脚本里, 在定义了form之后, 可以显示这些对象的值:
<>
write(statform.username.)
write(statform.userage.)
</>
但是,如果想在定义form之前这样做(如,在此HTML页中,在定义这个form前面),就会导致错误. 因为Navigator中,尚不存在这些对象.
类似地,一旦layout已经被显示出来,再设置某个属性值,既不能改变其值,也不会改变显示情况.例如, 假如你的文档标题定义如下:
<TITLE>My Java Page</TITLE>
则在Java中"My Java Page"被作为title的值.一旦Navigator已经在layout中把它显示出来(此例中,显示在Navigator窗口的标题条中),就不能再在Java中改变这个值.所以,若该页的后面部分有下述脚本:
title="The New Improved Java Page"
不能改变title的值,也不会改变页的外观,也不会产生错误.
--------------------------------------------------------------------------------
重要的 Navigator 对象
最有用的Navigator对象有document,form和
使用 document 对象
document 对象很重要,因为它的两个方法(method)write和writeln能生成HTML.借助这两个方法, 可以向用户显示Java表达式. 二者的区别在于writeln在行尾加了一个回车,但是由于HTML忽略回车,所以这一点差别只对预定义格式文本(preformatted text)有影响.如,PRE标记内部的文本.
document对象还有两个事件处理程序, 和onUnload, 以便当用户初次装载页或是退出页时完成一些功能.
每个页中只有一个document对象,它是该页内所有form, link, anchor对象的祖先.
使用form对象
Navigator为文档内的每个框架创建一个form对象.可以用NAME属性给form命名,方法如下:
<FORM NAME="myform">
<INPUT TYPE="text" NAME="quantity", onChange="...">
...
</FORM>
这样就产生了一个基于此框架的名为myform的Java对象.这个form中有一个属性对应着text对象. 你可以用下述办法引用这个text对象.
myform.quantity
你还可以这样引用text对象的属性.
myform.quantity.
一个文档内的所有form存放在名为forms的数组中, 第一个form(在该页最顶部)记为form[0],第二个为form[1],依次类推.所以前面引用还可以记为:
forms[0].quantity
forms[1].quantity.
类似地, form内的各元素, 如文本域,无线按钮等等, 均存在数组element中.
使用window对象
window对象是浏览器(Navigator)中所有其它对象的"父对象".在引用窗口的属性和方法时,可以省略window对象的名字.
window对象的下述几个方法(method)很有用,可以用来创建新的窗口和弹出式对话框:
open 和 close : 打开或关闭一个浏览器(browser)窗口
alert: 弹出一个警示对话框
confirm: 弹出一个确认对话框
window对象的属性对应于set内的所有, 这些存放在set中set中包含同一窗口中各个子的入口.例如,若一个窗口中有三个子, 这些子就用[0], [1] 和 [2]表示.
属性status用于设置位于客户窗口底部状态栏内的信息