《 JavaScript高级程序设计》第五章 浏览器中的JavaScript

截取自读书频道

http://book.csdn.net/bookfiles/110/index.htm

5.1  HTML中的JavaScript

5.1.1  <script/>标签

HTML页面中包含JavaScript使用<script/>标签实现。该标签通常放置在页面的<head/>标签中,最初定义的<script/>标签具有一个或两个特性,language特性声明要使用的脚本语言,src特性是可选的,声明要加入页面的外部JavaScript文件。language特性一般被设置为JavaScript,不过也可用它声明JavaScript的确切版本,如JavaScript 1.3(如果省略language特性,浏览器默认使用最新的JavaScript版本)

5.1.2  外部文件格式

外部JavaScript文件扩展名为.js。在外部文件中不需要<script/>标签,引用文件的<script/>标签出现在HTML页中。

5.1.3  内嵌代码和外部文件

大量的JavaScript代码不应内嵌在HTML文件中,原因如下:
1 安全 全性——只要查看页面的源代码,任何人都可确切地知道其中的代码做了什么。此外,在外部文件中还可加入版权和其他知识产权通告,而不打断页面流。
代码维护
缓存——浏览器会根据特定的设置缓存所有外部链接的JavaScript文件,如果两个页面使用同一个文件,只需要下载该文件一次。这将加快下载速度。
5.1.4  标签放置
注意:开始载入页面时,JavaScript就开始运行了,JavaScript是从上到下载入的。
5.1.5  隐藏还是不隐藏

下面的代码在内嵌代码周围加入HTML注释,这样其他浏览器就不会在屏幕上显示这段代码。

尽管这种隐藏代码的方法在Web早期非常流行,今天却不再是必需的。

5.1.6  <noscript/>标签

支持或启用JavaScript的浏览器会忽略这些HTML代码,不支持或者禁用JavaScript的浏览器则显示<noscript/>的内容。

5.1.7  XHTML中的改变

不再用language特性,而用type特性声明内嵌代码或要加入的外部文件的mime类型,JavaScriptmime类型是"text/javascript"

XHTML的第二个改变是使用CDATA段。XML中的CDATA段用于声明不应被解析为标签的文本(XHTML也是如此),这样就可以使用特殊字符,如小于(<)、大于(>)、和号(&)和双引号("),而不必使用它们的字符实体(&lt;&gt;&quot;)。而现在大多数浏览器不支持XHTML,所以CDATA不能被使用。为了现在的使用和将来 的扩展,使用下面方法:

5。2 SVG中的JavaScript

SVG基于XML的语言,用于在Web上绘制矢量图形。


5。3 BOM

BOM由一系列相关的对象构成。图5-3展示了基本的BOM体系结构。

  5-3

可以看到,window对象是整个BOM的核心,所有对象和集合都以某种方式回接到window对象。

5.3.1  window对象

window对象表示整个浏览器窗口。

如果页面使用框架集合,每个框架都由它自己的window对象表示,存放在frames集合中。

这段代码创建一个框架集,其中包括一个顶层框架和两个底层框架。这里,可以用window. frames[0]window.frames[“topFrame”]引用框架,也可以用top对象代替window对象引用这些框架(例如top.frames[0])。

top对象指向的都是最顶层的(最外层的)框架,即浏览器窗口自身。这可以确保指向正确的框架。此后,如果在框架内编写代码,其中引用的window对象就只是指向该框架的指针。

由于window对象是整个BOM的中心,所以它享有一种特权,即不需要明确引用它。

window另一个实例是parentparent对象与装载文件的框架集一起使用,要装载的文件也是框架集。

一个更加全局化的窗口指针是self,它总是等于window

1. 窗口操作

可以移动或调整浏览器窗口的大小:

moveBy(dx,dy)——把浏览器窗口相对当前位置水平移动dx个像素,垂直移动dy个像素。dx值为负数,向左移动窗口,dy值为负数,向上移动窗口。

2 moveTo(x,y)——移动浏览器窗口,使它的左上角位于用户屏幕的(x,y)处。可以使用负数,不过这样会把部分窗口移出屏幕的可视区域。

3resizeBy(dw,dh)——相对于浏览器窗口的当前大小,把它口的宽度调整dw个像素,高度调整dy个像素。dw为负数,把缩小窗口的宽度,dy为负数,缩小窗口的高度。

resizeTo(w,h)——把窗口的宽度调整为w,高度调整为h。不能使用负数。

例如:

1IE提供了window.screenLeftwindow.screenTop对象来判断窗口的位置,但未提供任何判断窗口大小的方法。用document.body.offsetWidthdocument.body. offsetHeight属性可以获取视口的大小(显示HTML页的区域),但它们不是标准属性。

2 Mozilla提供window.screenXwindow.screenY属性判断窗口的位置。它还提供了window.innerWidthwindow.innerHeight属性来判断视口的大小,window.outerWidthwindow.outerHeight属性判断浏览器窗口自身的大小。


2. 导航和打开新窗口

JavaScript 可以导航到指定的 URL ,并用 window.open() 方法打开新窗口。 该方法接受四个参数,即要载入新窗口的页面的 URL 、新窗口的名字(为目标所用)、特性字符串和说明是否用新载入的页面替换当前载入的页面的 Boolean 值。
特性字符串是用逗号分隔的,因此在逗号或等号前后不能有空格。

window.open()方法将返回window对象作为它的函数值,该window对象就是新创建的窗口(如果给定的名字是已有的框架名,则为框架)。

新窗口还有对打开它的窗口的引用,存放在opener属性中。只在新窗口的最高层window对象才有opener属性,这样用top.opener访问它会更安全。例如:

3. 系统对话框

除弹出新的浏览器窗口,还可使用其他方法向用户弹出信息,即利用window对象的alert()confirm()prompt()方法。

最后的对话框通过调用prompt()方法显示,如你所料,该对话框提示用户输入某些信息。除OK按钮和Cancel按钮外,该对话框还有文本框,要求用户在此输入某些数据。prompt()方法接受两个参数,即要显示给用户的文本和文本框中的默认文本(如果不需要,可以是空串)。下面的代码将显示图5-8所示的对话框:

如果点击OK按钮,将文本框中的值作为函数值返回。如果点击Cancel按钮,返回null。通常以下面的方式使用prompt()方法:

4. 状态栏

状态栏是底部边界内的区域,用于向用户显示信息

可以用window对象的两个属性设置它的值,即statusdefaultStatus属性。status可以使状态栏的文本暂时改变,而defaultStatus则可在用户离开当前页面前一直改变该文本。

5. 时间间隔和暂停

可以用window对象的setTimeout()方法设置暂停。该方法接受两个参数,要执行的代码和在执行它之前要等待的毫秒数(1/1000秒)。第一个参数可以是代码串(与eval()函数的参数相同),也可是函数指针。

要取消还未执行的暂停,可调用clearTimeout()方法,并将暂停ID传递给它:


时间间隔与暂停的运行方式相似,只是它无限次地每隔指定的时间段就重复一次指定的代码。可调用setInterval()方法设置时间间隔,它的参数与setTimeout()相同。ClearInterval()方法可用这个ID阻止再次执行该代码。

6. 历史

使用window对象的history属性及它的相关方法即可实现历史导航。

go()方法只有一个参数,即前进或后退的页面数。如果是负数,就在浏览器历史中后退。如果是正数,就前进。

因此,后退一页,可用下面的代码:

通常用该方法创建网页中嵌入的Back按钮,例如:

back()forward()方法可以实现同样的操作:

虽然不能使用浏览器历史中的URL,但可以用length属性查看历史中的页面数:

5.3.2  document对象

document对象实际上是window对象的属性,如你所知,window对象的任何属性和方法都可直接访问,所以下面这行代码将返回"true"

这个对象的独特之处是它是唯一一个既属于BOM又属于DOM的对象

下表列出了BOMdocument对象的一些通用属性:

   

   

alinkColor

激活的链接的颜色,如<body alink="color">定义的*

bgColor

页面的背景颜色,如<body bgcolor="color">定义的*

fgColor

页面的文本颜色,如<body text="color">定义的*

lastModified

最后修改页面的日期,是字符串

linkColor

链接的颜色,如<body link="color">定义的*

referrer

浏览器历史中后退一个位置的URL

title

<title/>标签中显示的文本

URL

当前载入的页面的URL

vlinkColor

访问过的链接的颜色,如<body vlink="color">定义的*

* 反对使用这些属性,因为它们引用了<body/>标签中的旧HTML特性。应该用样式表脚本代替它们。

document对象也有许多集合,提供对载入的页面的各个部分的访问。下表列出了这些集合:

 

   

   

anchors

页面中所有锚的集合(由<a name="anchorname"></a>表示)

applets

页面中所有applet的集合

embeds

页面中所有嵌入式对象的集合(由<embed/>标签表示)

forms

页面中所有表单的集合

images

页面中所有图像的集合

links

页面中所有链接的集合(由<a href="somewhere.htm"><a/>表示)

可用数字或名字引用document对象的每个集合,也就是说可用document.images[0]document.images["image_name"]访问图像

BOMdocument对象还有几个方法。最常用的方法之一是write()或它的兄弟方法writeln()。这两个方法都接受一个参数,即要写入文档的字符串。如你所料,它们之间唯一的区别是writeln()方法将在字符串末尾加一个换行符(/n)。

可以使用这种功能动态地引入外部JavaScript文件。例如:

注意字符串"</script>"被分成两部分("</src""ipt>")。这是必要的,因为每当浏览器遇到</script>,它都假定其中的代码块是完整的(即使它出现在JavaScript字符串中)。

write()writeln()方法密切相关的是open()close()方法。open()方法用于打开已经载入的文档以便进行编写,close()方法用于关闭open()方法打开的文档,本质上是告诉它显示写入其中的所有内容。通常把这些方法结合在一起,用于向框架或新打开的窗口中写入内容,如下所示:

这个例子打开空白页(使用本地的 "about:blank" URL ),然后写入新页面。要正确实现这一操作,在调用 write() 前,先调用 open() 方法。写完后,调用 close() 方法完成显示。

location 对象是 window 对象和 document 对象的属性(对此没有什么标准,导致了一些混乱)。 location 对象表示载入窗口的 URL ,此外,它还可以解析 URL

q  hash——如果URL包含#,该方法将返回该符号之后的内容(例如,http://www.some-
where.com/index#selection1
hash等于"#selection1")。

q  host——服务器的名字(如www.wrox.com)。

q  hostname——通常等于host,有时会省略前面的www

q  href——当前载入的页面的完整URL

q  pathname——URL中主机名后的部分。例如,http://www.somewhere.com/pictures/
index.htm
pathname"/pictures/index.htm"

q  port——URL中声明的请求的端口。默认情况下,大多数URL没有端口信息,所以该属性通常是空白的。像http://www.somewhere.com:8080/index.htm这样的URLport属性等于8080

q  protocol——URL中使用的协议,即双斜杠(//)之前的部分。例如,http://www.wrox.com中的protocol属性等于http:ftp://www.wrox.comprotocol属性等于ftp:

q  search——执行GET请求的URL中的问号(?)后的部分,又称为查询字符串。例如,http://www.somewhere.com/search.htm?term=javascript中的search属性等于
?term=javascript

location.href是最常用的属性,用于获取或设置窗口的URL(在这一点上,它类似于document.URL属性)。改变该属性的值,就可导航到新页面:

采用这种方式导航,新地址将被加到浏览器的历史栈中,放在前一个页面后,意味着Back按钮会导航到调用了该属性的页面。

assign()方法实现的是同样的操作:

这两种方法都可以采用,不过大多数开发者选用location.href属性,因为它更精确地表达了代码的意图。

如果不想让包含脚本的页面能从浏览器历史中访问,可使用 replace() 方法。该方法所作的操作与 assign() 方法一样,但它多了一步操作,即从浏览器历史中删除包含脚本的页面,这样就不能通过浏览器的 Back Forward 按钮访问它了。
reload() 方法,可重新载入当前页面。 reload() 方法有两种模式,即从浏览器缓存中重载,或从服务器端重载。究竟采用哪种模式由该方法的参数值决定,如果是 false ,则从缓存中载入,如果是 true ,则从服务器端载入(如果省略参数,默认值为 false )。

reload()方法调用后的代码可能被执行,也可能不被执行,这由网络延迟和系统资源等因素决定。因此,最好把reload()调用放在最后一行。


5.3.4  navigator 对象

navigator对象是最早实现的BOM对象之一,Netscape Navigator 2.0IE 3.0引入了它。它包含大量有关Web浏览器的信息。它也是window对象的属性,可以用window.navigator引用它,也可以用navigator引用。

下表列出了最常用的属性和方法以及最常用的四种浏览器(IEMozillaOperaSafari)中哪个支持它们。

属性/方法

   

IE

Moz

Op

Saf

appCodeName

浏览器代码名的字符串表示(如"Mozilla"

×

×

×

×

appName

官方浏览器名的字符串表示

×

×

×

×

appMinorVersion

额外版本信息的字符串表示

×

appVersion

浏览器版本信息的字符串表示

×

×

×

×

browserLanguage*

浏览器或操作系统的语言的字符串表示

×

×

cookieEnabled

说明是否启用了cookieBoolean

×

×

×

cpuClass

CPU类别的字符串表示("x86""68K""Alpha""PPC""other"

×

javaEnabled()

说明是否启用了JavaBoolean

×

×

×

×

language

浏览器语言的字符串表示

×

×

×

 

(续)

属性/方法

   

IE

Moz

Op

Saf

mimeTypes

注册到浏览器的mime类型的数组

×

×

×

onLine

说明浏览器是否连接到因特网上的Boolean

×

oscpu

操作系统或CPU的字符串表示

×

platform

运行浏览器的计算机平台的字符串表示

×

×

×

×

plugins

安装在浏览器中的插件的数组

×

×

×

×

preference()

用于设置浏览器首选项的函数

×

×

product

产品名的字符串表示(如"Gecko"

×

×

productSub

有关产品的额外信息的字符串表示(如Gecko版本)

×

×

opsProfile

 

securityPolicy

 

×

systemLanguage*

操作系统语言的字符串表示

×

taintEnabled()

说明是否启用了数据感染的Boolean

×

×

×

×

userAgent

用户代理头字符串的字符串表示

×

×

×

×

userLanuage*

操作系统语言的字符串表示

×

userProfile

允许访问浏览器用户档案的对象

×

vendor

品牌浏览器名的字符串表示(如"Netscape6""Netscape"

×

×

vendorSub

品牌浏览器的额外信息的字符串表示(如Netscape的版本)

×

×


5.3.5  screen 对象

虽然出于安全原因,有关用户系统的大多数信息都被隐藏了,但还可以用screen对象获取某些关于用户屏幕的信息(不出所料,它也是window对象的属性)。

screen对象通常包含下列属性(不过,许多浏览器都加入了自己的属性):

q  availHeight——窗口可以使用的屏幕的高度(以像素计),其中包括操作系统元素(如Windows工具栏)需要的空间。

q  availWidth——窗口可以使用的屏幕的宽度(以像素计)。

q  colorDepth——用户表示颜色的位数。大多数系统采用32位。

q  height——屏幕的高度,以像素计。

q  width——屏幕的宽度,以像素计。

确定新窗口的大小时,availHeightavailWidth属性非常有用。例如,可以使用下面的代码填充用户的屏幕:

此外,这些数据与站点的流量工具一起使用,可以判断用户的图形接受能力。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值