JavaScript概述 1.62对浏览器的控制 有此 Java script对象允许对浏览器的行为进行挖制。 Window对象支持弹出对话框以 向用户显示简啪消息的方法,还攴持从用户那里获取简咩输入信息的方法。此外 有些对象还定义了创建并打开(和关闭)全新的浏览器窗门的方法、新建的窗的 大小不限以及具有任意的用户控件组合。例如,它使你可以打开多个窗、以便用 广能够看到网鲑的多个视图。新的浏览器窗对临时显示生成的HTML文档非常有 用、而且、如果在创建窗冂时,它没有任何菜单栏和用户控件,那么还可以将它作 为对话框使用,以便驼小史加复杂的消息或用户输入。 Jav aScript没有定义可以在浏览器窗!l'接创建并操框架的方法。但是,它能 够动态生成HTML的能力却可以让你使用HTML的标记创建任何想要的糕架布局。 javAscript还可以挖制什浏览器中显示哪个刚页。 location对象可以在浏览器的任何 个框或窗∏中装载并显示Ⅲ任总的URL所指的文档。 History对象则可以在用 户的浏览历史中前后移动,模拟浏览器的 Forward按钮和Back按钮的动作。 另外, Window对象还有·个方法使你可以在任意一个浏览器窗1l的状线中向用 户显示消息。 163与HTML表单的交互 客广端 Javascript的另个重之处就是它能够与HTML表单进行交互。这种能力 是的rm对象以及它含有的表单元秦对象(即Bun对象、 Checkbox对象, Hidden 对象、 Password对象、 Radio对象、 Reset对象、 Select对象、 Submit对象、Tex对 象和Tε tares对象)提供的。正是这些元桊村象使得你能够对文档屮某个表单的输 入元素的值进行读写操作。例如,可以使用表单友小一张在线的H录,这样用户可 以输入自u的订单,并阻能够川 Javascript从表惮中读取用户的输入,卅来计算訂 单的总额、销代税以及运输赀等。实际上.像这样的 JavaScript程序在络屮是很 常见的。稍后我们将会看到个使用HTML表单和 Javascript来计算每月的住房抵 押和其他借贷攴H的程序。对这样的应用程序, Javascript与基于服务器的脚木 相比有一个明显的优势.那就是 JavaScript代码是在客户端执行的,所以不必把表 单的內容发送给胀务器、再让服务器执行较为简单的计算了
8 第一章 客户端 JavaScript代码在表单中的另-种常见用法是在提交表单之前对表单数据进 行验证。如果客广端的 JavaScrip代码能够对川户的输入进行所有必要的错误检査 那么服务器端就没有必要再大费周折地检测并通知用户琐碎的输入错误了。此外 客户端 JavaScript代码还能够对输入的数据进行预处理,这就大大减少了要发送给 服务器的数据量。在某些情况下,客户端 i JavaScript甚至可以消除对服务器上的脚 本的需要。(不过、 JavaScript和服务器端的脚本可以很好地协同工作。例如,·个 服务器端程序可以从无到有地动态创建-段 Javascript代码,就像它动态地创建 HTML文件-样。) 1.64与用户的交互 JavaScript的一个重要钋性就是能够定义事件处理器,即在特定的事件发生时要执 行的代码段。这些事件通常都是用户触发的,例如把鼠标移到-个超文本链接,在 表单中输入了个值或者点击∫表单中的Subm按钮这种处理事件的能力是至关 重要的,因为具有图形界面(如HTML表单)的程序设计内在地要求一种事件驱动 的模型。 JavaScript可以触发任意一种类型的动作来响应用户事件。最为典型的例 子莫过于当用户把鼠标移到一个超文本链接时,在状态栏中显示一条特定的消息 或者当用户提交了个重要的表单时,弹出一个确认对话框 165用 cookie读写客户的状态 cookie是客户永久性存储或暂时存储的少量状态数据。 cookie将随网页被服务器发 送给客广,客户在本地将它们存储起来。此后当客户请求同-个网页或与之相关的 网页时,它可以把相关的coki传服务器,脹务器能够利用这些cgke的值来改 变发送回客户的内容。coi使得网页或者网站能够“记住”有关客户的一些信息, 例如,用户以前访问过该站点,或者用户已经在此注册过,已经获得了∏令,甚至 用户己经表明了对网页的颜色与布局的偏爱,等等。 cookie提供的状态信息正是 web的无状态的HTTP协议所遗漏的 当初发明 cookie时,它是由服务器端脚本专用的,虽然它们被存储在客户端,但是 却只有服务器能够对它们进行读写操作。 Javascript改变了上述的规则,因为 JavaScript程序能够读写coki的值,还可以根据 cookie值动态地生成文档内容
Javascript概述 19 1.66更多的特性 除∫已经提到过的特性之外、 Javascript还有许多其他的功能 JavaScript可以改变标记<ing>显示的图像,从而产生图像翻转和动两的效果 JavaScript可以与Java小程序成其他出现在浏览器中的嵌入对象进行交互 JavaScript代码既可以读写这些小程序或对象的属性,又可以调用它们定义的 方法。这一特性真使得 Javascript可以将Java脚本化了 在本节开始的时候我提到过, JavaScript可以执行任何计算。它具有浮点数据 类型、操作这种类犁的算术运算符以及所有的标准浮点运算函数。 javAscript的Date对象简化了计算和使用日期与时间的方法。 Document对象攴持的一个属性声明了当前文档的最后修改日期。你可以使用 这属性自动地在文档中显示一个时间戳。 · JavaScript的 window. settimeout()方法可以确定一个 JavaScript代码块在 多少毫秒之后执行。这对于在 JavaScript程序中建立延退或重复的动作是非常 有用的。在 Javascript1.2中, setTimeout()中增加了一个名为set Interva1()的方法。 · Navigator对象(当然是以 Nestcape Web浏览器命名的)的一些变量声明了 在运行的浏览器的名字和版本,还有一些变量标识了运行该浏览器的平台。有 了这些变量,脚本就能够根据浏览器或平台来定制白已的行为了,这样一来, 它们便可以利用某些版本支持的额外能力或者避开存在于某种台上的bug 仵客户端 JavaScript1.2中.Scre对象提供了显小Web浏览器的显示器的大 小和色度的信息。 从 Javascript I.1开始, Window对象的scrl1()方法就允许 Javascript程序 在X方向和Y方向滚动窗目了。在 JavaScript I2中,现了·批用于移动窗 凵或调整窗口大小的方法,它们代替了上述的scr11()方法。 167 JavaScript不能做什么 客户端 JavaScript具有-连串给人留下深刻印象的功能。但是要注意,这些功能只
第一章 限与浏览器相关的任务或与文档相关的任务。由于客户端 JavaScript只能用于有 限的环境中,所以它没有独立的语所必需的特性 ·除了能够动态地生成浏览器要显示的HTML文档(包括图像、表、框架、表单 和字体、等等)之外. Javascript不具有任何图形处理能力 出于安全性方而的原因、客户端 Javascript不允许对文件进行读写操作。显而 易见,你·定不想让…个來白某个站点的不可靠程序在自已的计算机上运行 并且随意篡改你的文件。 除了能够引发浏览器下载任意URL所指的文档以及把HTML表单的内容发送 给服务器端脚木、电子郎件地址之外. Javascript不攴持任何形式的联网技术 17 JavaScript的安全性 只要程序(如 Javascript脚本、 Visual basic程序或 Microsoft word宏)包含在共 享文档中,尤其是通过 nternet或电子邮件传输的文桦,就可能在病毒或共他恶 意程序。 Javascript语言的设计者意识到了这些安个方面的问题、所以没有赋予 Javascript程序执行破坏性操作的杈利。例如,前面说呖过,客户端 JavaScript科序 不能读本地文件或不能执行联树操作 但是.由于Web浏览器环境非常复杂,在早期的浏览器版本中出现了大量的安全性 问题。例如,在 Navigator2中,能够编写可以自动窗取网页访问者的电子邮作地 址的 Javascript代码,然后不经访问者同意就以他们的名义白动发送电子邮件。不 过这点和共他人的安全漏泂已经被修止了。尽管不能保证不存在其他安全漏洞了 但是大多数有见识的用广都轻松地让现代浏览器运行贞面上的 JavaScript代码。第 二十-章对客户端 javAscript的安全性做了定整的讨论 18例子:用 JavaScript计算借贷支出 例1-3是·个重要的 JavaScript程序的完整清单,该程序计算的是每个月的住房抵押 和其他借贷的支出,其依据是借贷的数量、利息率和偿付周期。你会发现、这个程 序是由一个HTML表单构成的、该表单可以与 JavaScript代码进行交互,图1-3显
javaScript概述 示了这个表单在浏览器中乩示时的样子。不过这里的图只是程序的静态网面。程序 中的 JavaScript代码使它具有了动态效果,即当用广改变了借贷的数量、利息率或 攴付数H吋, Javascript代码就会重新计算月攴付额、支付总额和借贷期内攴付的 总利息 I Ele Edt yiew Favorites Ioos Help Links Enter Loan information 1) Amount of the loan (any currency):[200000 2)Amual percentage rate of nterest 56.5 3)Repayment penod n years Compute Payment Information 4)Your monthly payment will bt 126414 5) Your total payment will be 45508898 6) Your total nterest payments will be 25508898 elDon 图1-3:用 JavaScript编写的借贷支付金额计算器 本例的前半部分是个HTML表单,它使用了张HTML表将内容很好地组织了起 米。注意,有儿个表单元秦定义了 nchange或 onclick事件处理器。当用户改变 了输入或者点击了表单中显示的 Compute按钮时,就会触发那些事件处理器。还要 汴总的是,事件处理器性质的值是个 JavaScript代码串—ca1 culate()。当 事件处理器被触发时,它就会执行这些代码,也就是调用函数 calculate()。 数 calculate()是在例的第二部分中定义的,它位于标记< script>之内。该 函数先从表单中读取用户输入的信息,然后计算借贷支付金额,最后用表单最下面 的个元素显示出计算的结果 例1-3虽然简单,但是却值得花时间仔细研究·番。目前你不应该期望自己能够完