本章内容:使用<script>元素、嵌入脚本与外部脚本、文档模式对JavaScript的影响、考虑禁用JavaScript的场景。

1.<script>元素

向HTML页面中插入JavaScript的主要方法,就是使用<script>元素。HTML4.01为<script>定义了下列属性:

async:可选。表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。

charset:可选。表示应该通过src属性指定的代码的字符集。

defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。

language:已废弃。

src:可选。表示包含要执行代码的外部条件。

type:可选。可以看成是language的替代属性;表示编写代码使用的脚本语言的内容类型。这个属性不是必需的,如果不指定这个属性,默认值为text/javascript。

使用<script>元素的方式有两种:直接在页面嵌入JavaScript代码和包含外部JavaScript文件。

嵌入式:在使用<script>元素嵌入JavaScript代码时,只须为<script>指定type属性。下面这样把JavaScript代码直接放在元素内部即可:

<script type="text/javascript">
function sayScript()
{alert("Hi!");
}
</script>

包含在<script>元素内部的JavaScript代码将从上至下依次解释。就拿前面这个例子来说,解释器会解释一个函数的定义,然后将该定义保存在自己的环境当中。在解释器对<script>元素内部的所有代码求值完毕以前。页面中的其余内容都不会被浏览器加载或显示。

在使用<script>嵌入JavaScript代码时,记住不要在代码中任何的地方出现"</script>"字符串。因为按照解析嵌入式代码的规则,当浏览器遇到字符串"</script>",就会认为那是结束的</script>标签。而通过转义字符 "/" 来解决这个问题。

外部式:使用<script>元素来包含外部JavaScript文件,那么src属性就是必需的。这个属性指向外部JavaScript文件的链接。例如:

<script type="text/javascript" src="example.js"></script>

在这个例子中。外部文件example.js将被加载到当前页面中。外部条件只须包含通常要放在开始的<script>和结束的</script>之间的那些JavaScript代码即可。

2.标签的位置

按照传统的做法,所有<script>元素都应该放在页面的<head>元素中,例如:

        <title>Example HTML Page</title><script type="text/javascript"  src="exmpale1.js"></script><script type="text/javascript" src="example2.js"></script></head><body><!-- 这里放内容 --></body></html>

这样做法的目的就是把所有外部文件(包括CSS文件和JavaScript文件)的引用都放在相同的地方。可是这样,在文档的<head>元素中包含所有JavaScript文件,意味着必须等到全部JavaScript代码都被下载解析和执行完成以后,才能开始呈现页面的内容(浏览器在遇到<body>标签时才开始显示内容)对于有很多JavaScript代码的页面来说,会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口将是一片空白。这将给用户一个不好的体验。

所以,现在Web应用程序一般都把全部JavaScript引用放在<body>元素中页面内容的后面,以下例子所示:

    <!DOCTYPE html><html><head><title>Example HTML Page</title></head><body><!-- 这里放内容 --><script src="jquery.min.js"></script><script src="example.js"></script></body></html>

在解析包含的JavaScript代码之前,页面的内容将完全呈现在浏览器中。用户也会因为浏览器窗口显示空白页面的时间缩短而感到打开页面速度加快了。

3.延迟脚本

defer:表明脚本在执行时不会影响页面的构造。也就是说脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。

   <!DOCTYPE html><html><head><title>Example HTML Page</title><script type="text/javascript" defer="defer" src="jquery.min.js"></script><script type="text/javascript" defer="defer" src="example.js"></script>   </head><body><!-- 这里放内容 --></body></html>

在这个例子中,虽然我们把<script>元素放在了文档的<head>元素中,但其中包含的脚本将延迟到浏览器遇到</html>标签后再执行。

最好只包含一个延迟脚本,defer属性只适用于外部脚本文件。把延迟脚本放在页面底部任然是最佳选择。

4.异步脚本

async:与defer属性相似,都用于改变处理脚本的行为。async只适用于外部脚本文件,并告诉浏览器立即下载文件。标记为async的脚本并不保证按照指定它们的先后顺序执行。例如:

   <!DOCTYPE html><html><head><title>Example HTML Page</title><script type="text/javascript" async src="jquery.min.js"></script><script type="text/javascript" async  src="example.js"></script>   </head><body><!-- 这里放内容 --></body></html>

在以上代码中,第二个脚本文件可能会在第一个脚本文件之前执行。因此,确保两者之间互不依赖非常重要。指定async属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。为此,建议异步脚本不要在加载期间修改DOM。

嵌入代码与外部文件

在HTML中嵌入JavaScript代码虽然没有问题,但是一般认为最好的做法还是尽可能使用外部文件包含JavaScript代码。它有如下有点:

可维护性:遍及不同HTML页面的JavaScript会造成维护问题。但把所有JavaScript文件都放在一个文件夹中,维护起来就轻松多了。开发人员可以不触及HTML标记情况下,集中精力编辑JavaScript代码。

可缓存:浏览器能够根据具体的设置缓存链接的所有外部JavaScript文件。如果页面都使用同一个文件,那么这个文件只需要下载一次。最终结果可以加快页面加载的速度。

<noscript>元素

当浏览器不支持JavaScript时如何让页面平稳退化。解决方案就是创造一个<noscript>元素,用以在不支持JavaScript的浏览器显示替代的内容。只有下列情况才会显示出来:

浏览器不支持脚本;

浏览器支持脚本,但脚本被禁用。

符合上述任何一个条件,浏览器都会显示<noscript>中的内容。而在除此之外的其他情况下,浏览器不会呈现<noscript>中的内容。看下面这个例子:

   <!DOCTYPE html><html><head><title>Example HTML Page</title><script type="text/javascript" defer="defer" src="jquery.min.js"></script><script type="text/javascript" defer="defer" src="example.js"></script>   </head><body><noscript><p>本页面需要浏览器支持(启用)JavaScript</noscript></body></html>

这个页面会在脚本无效的情况下向用户显示一条消息。而在启用了脚本的浏览器中,用户永远无法看到它,尽管它是页面的一部分。

 小结:

  把JavaScript插入到HTML页面中要使用<script>元素。使用这个元素可以把JavaScript嵌入到HTML页面中,让脚本与标记混合在一起;也可以包含外部的JavaScript文件。需要注意的是:

    1.在包含外部JavaScript文件时,必须将src属性设置为指向相应文件的URL。而这个文件既可以是包含它的页面位于同一个服务器上的文件,也可以是其他任何域中的文件。

    2.所有<script>元素都会按照它们在页面中出现的先后顺序依次被解析,在不使用defer和async属性的情况下,只有在解析完前面<script>元素中的代码之后,才会开始解析后面<script>元素中的代码。

    3.由于浏览器会先解析完不使用defer属性的<script>元素中的代码,然后再解析后面的内容,所以一般应该把<script>元素放在页面最后,主要内容后面,</body>标签前面。

    4.使用defer属性可以让脚本在文档完全呈现之后再执行。延迟脚本总是按照指定它们的顺序执行。

    5.使用async属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行。

    6.使用<noscript>元素可以指定在不支持脚本的浏览器中显示的替代内容。但在启用了脚本的情况下,浏览器不会显示<noscript>元素中的任何内容。

转载于:https://www.cnblogs.com/zxx1997/p/6901336.html

JavaScript高级程序设计(2)在HTML中使用JavaScript相关推荐

  1. 打码进行中-JavaScript高级程序设计-第1章-什么是javaScript

    1.1简短的历史回顾 输入验证 网景 微软 欧洲计算机制造商协会(Ecma) ECMAScript 1.2JavaScript实现 完整的JavaScript实现包含以下几个部分: 核心(ECMASc ...

  2. 我与《JavaScript高级程序设计》的相爱相杀----JavaScript摘记

    您的点赞与关注是对我最好的鼓励 文章目录 第3章 语言基础 3.1 语法 3.2 关键字与保留字 3.3 变量 3.4 数据类型 第4章 变量, 作用域与内存 第5章 基本引用类型 5.1 Date ...

  3. 攻下《JavaScript高级程序设计》——第二章 在HTML中使用JavaScript

    从上一章我们知道了,JavaScript是一种专门为网页交互而设计的脚本语言,那么,它就免不了和HTML打交道,所以在设计JavaScript的时候,Netscape首要面临的就是,怎么让HTML和J ...

  4. 读javascript高级程序设计-目录

    javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/> 本笔记是为了方便日后查阅,仅作学习交 ...

  5. 回顾《JavaScript高级程序设计》目录篇

    <JavaScript高级程序设计>看这一份够了,前提是等我更完... 回顾<JavaScript高级程序设计>目录篇 精简<JavaScript高级程序设计>四 ...

  6. javascript高级程序设计(python编程代码大全)

    JavaScript权威指南和JavaScript高级程序设计哪本好? <JavaScript权威指南>比<JavaScript高级程序设计>难很多,个人看法 先看:<J ...

  7. 读《Javascript高级程序设计》中的javascript事件处理程序(事件侦听器)心得

    今天读了<Javascript高级程序设计>中的javascript事件处理程序(事件侦听器)部分的内容,总结一些自己的心得: 事件就是用户或者浏览器自身执行的某种动作.例如click . ...

  8. 《JavaScript高级程序设计(第3版)》教程大纲

    词条 <JavaScript高级程序设计>是2006年人民邮电出版社出版的图书,作者是(美)(Nicholas C.Zakas)扎卡斯.本书适合有一定编程经验的开发人员阅读,也可作为高校相 ...

  9. 前端红宝书《JavaScript高级程序设计》核心知识总结

    此文是对<JavaScript 高级程序设计>一书难点的总结,也是笔者在看了 3 遍之后的一些梳理和感想,希望能借此巩固js的基础和对一些核心概念有更深入的了解. 摘要 JS基本的数据类型 ...

  10. 《JavaScript高级程序设计》(第2版)上市

      本书是技术畅销书<JavaScript高级程序设计> 的第2版,几乎全部更新.重写 了上一版的内容,融入了作者近几年来奋战在前端开发一线的宝贵经验 , 是学习和提高JavaScript ...

最新文章

  1. bulma.css_如何建立一个? 具有Bulma CSS的特斯拉响应页面
  2. Groovy里使用CountDownLatch
  3. 深入C#中的String类
  4. php求链表中位数,先给伸手党的php链表遍历求和
  5. CentOS6_mini_安装后基本配置
  6. mysql上传到阿里云服务器地址_从0部署Web项目到阿里云服务器上
  7. .nett Core之路由配置
  8. 剑指Offer-46:把数字翻译成字符串
  9. 【数据分析/挖掘】如何处理类别型特征?常用编码方式?Python实现?
  10. Servlet.service() for servlet jsp threw exception
  11. JavaScript-switch条件分支语句
  12. 跨层中介作用模型2-1-1的Mplus语法
  13. c# rar解压大小_C#解压RAR压缩文件
  14. c++程序 cpu占用过高排查方法
  15. rtl8723bu linux wifi驱动移植教程
  16. 特征值和特征向量的理解 浅显易懂 肯定有收获
  17. geotools应用-JTS生产四叉树索引和R树索引
  18. Python气象图形的绘制——预
  19. feign.RetryableException: 连接超时 (Connection timed out) executing xxx FeignException.java:249
  20. cmd批量创建文件夹的几种方式

热门文章

  1. python中range函数和xrange函数有什么异同?
  2. leetcode:Single Number【Python版】
  3. 转:OWASP发布Web应用程序的十大安全风险
  4. 【原创】ABAP根据文件路径获取文件所在目录
  5. 【MySQL】数据库事务处理---MySQL
  6. android 多个语音合成,android实现语音合成
  7. python ssl模块_转 Python3 ssl模块不可用的问题
  8. 检测到目标主机可能存在缓慢的http拒绝服务攻击_高防服务器能防住哪些攻击?“流量清洗”与它有什么关系?...
  9. 2021年跨专业/转行业学IT,还有前途吗?
  10. web前端开发规范总结