posts - 297,  comments - 1618,  trackbacks - 0
 

说明:本文为《JavaScript高级程序设计》第5章学习笔记。

    本章探讨如何把JavaScript嵌入HTML及其他语言,并介绍了BOM(浏览器对象模型)的一些基本概念。

一.HTML中的JavaScript

1. <script/>标签

       最初定义的JavaScript标签具有一个或两个特性,language特性声明要使用的脚本语言,src特性是可选的,声明要加入页面的外部JavaScript文件。language特性一般被设置为JavaScript,不过也可以用它声明JavaScript的确切版本,例如JavaScript 1.3(如果省略,浏览器默认使用最新的JavaScript版本)。

       Eg1. <script language=”JavaScript”>

                     var i=0;

              </script>

       Eg2. <script language=”JavaScript” src=”external.js”></script>

2. 外部文件格式

       外部文件中为只包含JavaSript代码的纯文本文件。在外部文件中不需要<script/>标签。

       Eg. <script language=”JavaScript” src=”external.js”></script>

       external.js的内容如下:

          function sayHello() {

         alert(“Hello!”);

}

3. 内嵌代码和外部格式

       一般认为,大量的JavaScript不应内嵌到HTML文件中,原因如下:

l         安全性——只要查看页面的源代码,任何人都可确切地知道其中的代码做了什么。如果怀有恶意的开发者查看了源代码,就可能发现系统漏洞,危及整个站点或应用程序的安全。此外,在外部文件中还可加入版权和其他知识产权通告,而不打算页面流;

l         代码维护——如果JavaScript代码散布于多个页面,那么代码维护将变成一场噩梦。

l         缓存——浏览器会根据特定的设置缓存所有外部链接的JavaScript文件,这意味着如果两个页面使用同一个文件,只需要下载该文件一次。这将加快下载速度。把同一段代码放入多个页面中,不只浪费,还增加了页面大小,从而增加下载时间。

4.标签放置

       一般放在<head/>中,这样在显示页面主题后,这些代码就被完全装载进浏览器。唯一该出现在<body/>标签中的代码是调用前面定义的函数的代码。

       Eg.

<html>
              
<head>
                     
<title>测试</title>
                     
<script language="JavaScript">
                            
function sayHi() {
       alert(
"Hi");
}

                     
</script>
              
</head>
              
<body>
                     
<input type="button" value="调用函数" onclick="sayHi()"/>
              
</body>
       
</html>


5. 隐藏还是不隐藏

       若要在不支持JavaScript的浏览器中隐藏<script/>的代码。

       Eg.

<script language="JavaScript">
              
<!
                     
function sayHi() {
       alert(
"Hi");
}

              
//-->
              </script>

6<noscript/>标签

       不支持JavaScript的浏览器另外一个令人关注的是如何提供替代的内容。隐藏代码只是解决方法的一部分,开发者还需要一种方法,声明在JavaScript不能用时应该显示的内容。解决方法是采用<noscript/>标签,它可包含任何HTML代码(除<script/>)。支持或启用JavaScript的浏览器会忽略这些HTML代码,不支持的则显示<noscript/>的内容。

7XHTML中的改变

       近年来,随着XHTML标准的出现,<script/>标签也经历了一些改变。它不再用language特性,而用type特性来声明要加入的外部文件的mine类型。 

       Eg. <script type=”text/javascript” src=”external.js”></script>

二.SVG中的JavaScript

       SVG是一种崭露头角的基于XML的语言,用于在Web上绘制矢量图形。矢量图形不同于光栅图形(位图),它们定义的是三角形、线段及它们之间的关系,而不只是定义图像的每个像素的颜色。这样生成的图像无论大小,看起来都是相同的。随着这种语言的日益流行,矢量图形程序已经开始加入SVG导出功能。

三.BOM

       BOM由一系列相关的对象构成,window对象是整个BOM的核心,所有对象的集合都以某种方式回接到window对象。

1.       window对象

window对象表示整个浏览器窗口,但不必表示其中包含的内容。此外,window还可用于移动或调整它表示的浏览器的大小,或者对它产生其他影响。

Eg. 可用window.frames[0]window.frames[“topFrame”]来引用框架集合中的某个框架。

1) 窗口操作

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

moveTo(x, y)——移动浏览器窗口,使它的左上角位于用户屏幕的(x, y)处。

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

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

1)      导航和打开窗口

Eg. window.open(http://www.wrox.com/, “wroxwindow”, “height=150,width=300,top=10,left=10,resizable=yes”);

2)      系统对话框

Eg1. alert(“Hello world!”);

Eg2. comfirm(“Are you sure?”);

Eg3. propt(“What’s you name?”, “阿蜜果”);

3)      状态栏

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

Eg1. window.defaultStatus = “You are surfing www.wrox.com.”;

Eg2. window.status = “hello, 阿蜜果”;

4)      时间间隔和暂停

       JavaScript支持暂停和时间间隔,这可有效地告诉浏览器应该何时执行某行代码。所谓暂停,是在指定的毫秒数后执行指定的代码。时间间隔是反复执行指定的代码,每次执行之间指定的毫秒数。

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

       Eg1. setTimeout(“alert(‘Hello world!’)”, 1000);

       Eg2. setTimeout(function() {alert(“Hello world”);}, 1000);

       该函数返回一个数字暂停ID,与操作系统的进程ID相似。要取消还未执行的暂停,可调用clearTimeout()方法,并将暂停ID传递给它。如下:

       var iTimeoutId = setTimeout(“alert(‘Hello world!’)”, 1000);

       clearTimeout(iTimeoutId);

       时间间隔与暂停的运行方式相似,只是它无限次地每隔指定的时间段就重复一次指定的代码。可调用setInterval()方法设置时间间隔,它的参数和setTimeout()相同,是要执行的代码和每次执行之间等待的毫秒数。

       Eg1. setInterval(“alert(‘Hello world!’)”, 1000);

       Eg2. setInterval(function() {alert(“Hello world!”)}, 1000);

       此外,与setTimeout()类似,setInterval()方法也创建时间间隔ID,以标识要执行的代码。ClearInterval()方法可用这个ID阻止再次执行该代码。

       Eg. 

var iNum = 0;
          
var iMax = 100;
          
var iIntervalId = null;
          
function incNum() {
        iNum
++;
     
if (iNum = iMax) {
       clearInterval(iIntervalId);
}

}

iIntervalId 
= setInterval(incNum, 500);

     这段代码的功能是:每隔500ms,就对数字iNum进行一次增量运算,直到它达到最大值(iMax)。

5)      历史

历史是指访问过的站点的列表。处于安全原因,所有导航只能通过历史完成,不能得到浏览器历史中包含的页面的URL

Eg1. 后退一页:window.history.go(-1); 或者 history.go(-1); 或者history.back();

Eg2. 前进一页:history.go(1); 或者 history.forward();

Eg3. 查看历史中的页面数:history.length;

2.       document对象

document对象实际上是window对象的属性,因为window对象的任何属性和方法都可直接访问,所以下面代码返回“true”:

alert(window.document == document);

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

Eg1. 改变框架的标题:top.document.title = “新标题”;

Eg2. 把窗口导航到新页面:document.URL = “http://www.blogjava.net/amigoxie”;

Eg3. document.links[0]访问链接;

Eg4. document.images[0]document.images[“imgHome”]访问图像;

Eg5. document.forms[0]document.forms[“frmSubscribe”]访问表单。

Eg6. var oNewWin = window.open(“about:blank”, “newwindow”, “height=150, width=300, top=10, left=10, resizable=yes”);

    oNewWin.document.open();

   oNewWin.document.write(“<html><head><title>新窗口</title></head>”);

   oNewWin.document.write(“<body>新窗口内容</body></html>”);

   oNewWin.document.close();

本例功能如下:打开空白页,然后写入新页面,写完后,调用close()方法完成显示。

3.       location对象

BOM最有用的对象之一是location对象,它是window对象和document对象的属性。location对象表示载入窗口的URL,此外,它还可以解析URL

l         hash——如果URL包含#,该方法将返回该符号之后的内容;

l         host——服务器的名字(eg. www.wrox.com);

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

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

l         pathname——URL中主机后面的部分;

l         port——URL中声明的请求的端口,默认情况下,无端口信息;

l         protocol——URL中使用的协议,即双斜杠之前的部分;

l         search——执行GET请求的URL中的问号后的部分。

Eg1. location.href = “http://www.blogjava.net/amigoxie”;

Eg2. location.assign(“http://www.blogjava.net/amigoxie”);

如果不想要包含脚本的页面能从浏览器中访问,可使用replace()方法,该方法所做的操作与assign()方法一样,但它多了一步操作,即从浏览器历史中删除包含脚本的页面,这样就不能通过浏览器的BackForward按钮访问它了。

Eg3. location. Replace(“http://www.blogjava.net/amigoxie”);

Eg4. 从服务器重载当前页面:location.reload(true);

Eg5. 从缓存中重载当前页面:location.reload(false); 或者 location.reload();

4.       navigator对象

它是最早实现的BOM对象之一。它包含大量有关Web浏览器的消息。它也是window对象的属性,可以用window.navigator引用它。

它包括appNameappVersion等属性。

5.       screen对象

虽然处于安全原因,有关用户系统的大多数信息都被隐藏了,但还可以用screen对象获取某些关于用户屏幕的信息。

属性如下:

l         availHeight——窗口可以使用的屏幕的高度(以像素计),其中包括操作系统元素需要的空间;

l         availWidth——窗口可以使用的屏幕的狂赌(以像素计);

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

l         height——屏幕的高度(以像素计);

l         width——屏幕的宽度(以像素计)。

Eg. window.resizeTo(screen.availWidth, screen.availHeight);

四.小结

       本章介绍了Web浏览器中的JavaScript,学到了BOM及它提供的各种对象。

posted on 2007-08-31 17:40 阿蜜果 阅读(1375) 评论(3)  编辑  收藏 所属分类: Javascript


FeedBack:
# re: JavaScript学习笔记——浏览器中的JavaScript
2007-09-03 17:40 | 紫枫凝潇烟
看这本书不如<javascript权威指南>  回复  更多评论
  
# re: JavaScript学习笔记——浏览器中的JavaScript[未登录]
2007-09-04 14:56 | -274°C
权威指南中午休息的时候我拿来做枕头。权威指南是不错,就是书太重了。  回复  更多评论
  
# re: JavaScript学习笔记——浏览器中的JavaScript
2007-09-05 16:52 | 杨爱友
对,权威指南是在你开发中遇到问题查阅用的,不是学习用的,它就好比字典,或JAVA API,用来查阅。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

      生活将我们磨圆,是为了让我们滚得更远——“圆”来如此。
      我的作品:
      玩转Axure RP  (2015年12月出版)
      

      Power Designer系统分析与建模实战  (2015年7月出版)
      
     Struts2+Hibernate3+Spring2   (2010年5月出版)
     

留言簿(262)

随笔分类

随笔档案

文章分类

相册

关注blog

积分与排名

  • 积分 - 2284416
  • 排名 - 3

最新评论

阅读排行榜

评论排行榜