https://www.jianshu.com/p/8247a9401725

2.1 Script元素

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

<script>定义了下列6个属性:

  async:可选。async 属性规定一旦脚本可用,则会异步执行,表示应该立即下载脚本,但不妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。async 属性仅适用于外部脚本(只有在使用 src 属性时)。
    charset:可选。表示通过src属性指定的代码的字符集。由于大多数浏览器会忽略它的值因此很少用。
    defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。最好只包含一个延迟脚本。HTML5 的实现会忽略给嵌入脚本设置的 defer 属性。
language: 已经废弃。
    src:可选。表示包含要执行代码的外部文件。
    type:可选。可以看成language的替代属性,表示编写代码使用的脚本语言的内容类型(也称MIME类型)。服务器在传送JavaScript文件时使用的MIME类型通常是application/x-javascript。

2.1.1 标签的位置

把JavaScript文件放入<head>元素中,意味着必须等到全部JavaScript代码都被下载,解析和执行完成之后,才开始呈现页面内容(浏览器在遇到body标签时才开始呈现内容)。
这个问题会导致浏览器在呈现页面时出现明显延迟,导致浏览器窗口一片空白。
现在Web程序一般都把JavaScript引用放在<body>元素页面的内容后面。

2.1.2 延迟脚本

HTML4.0.1为<script>标签定义了defer属性(只适用外部脚本)。这个属性的用途是表明脚本在执行的时候不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。
因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。
在</html>之后才执行,按照出现的先后吮吸执行。
IE4、FireFox3.5、Safari5、Chrome是最早支持defer属性的浏览器。其他浏览器会忽略这个属性,像平常脚本一样处理。
为此,把延迟脚本放在页面底部仍然是最佳选择

2.1.3 异步脚本

HTML5为<script>标签定义了async属性(只适用外部脚本)。告诉浏览器立即下载文件。标记为async的脚本并不保证它们的先后顺序执行。
 

2.1.4 在XHTML中的用法

      用CData片段来包含JavaScript代码,在XHTML中,CData是文档中的一个特殊区域,这个区域可以包含不需要解析的任意格式的文本内容。
       [CDATA{
      //中间可以写js代码
      }]
     如果有浏览器不兼容XHTML的话,可以使用JavaScript注释将CData标记注释掉

2.1.5  不推荐使用的语法

在最早引入<script>元素的时候,该元素与传统的HTML的解析是有冲突的。由于要对这个元素应用特殊的解析规则,因此在那些不支持JavaScript的浏览器(Mosaic)中就会导致问题。
具体来说,不支持JavaScript的浏览器会把<script>元素的内容直接输出到页面中,因此会破坏页面的布局和外观。
让JavaScript代码包含在一个HTML注释中,如下所示
<script><!--
//js代码
//--></script>
虽然这种注释JavaScript代码的格式得到了所有浏览器的认可,也能被正确解释,但由于所有浏览器都已经支持JavaScript,因此也就没有必要再使用这种格式。
在XHTML模式下,因为脚本包含在XML注释中,所有脚本会被忽略
 

2.2 嵌入代码与外部文件

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

不过,并不存在必须使用外部文件的硬性规定,但支持外部文件的人多会强调如下优点:

1.可维护性

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

2.可缓存

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

3.适应未来:

通过外部文件来包含JavaScript无须使用前面提到的XHTML或者注释。HTML和XHTML包含外部文件的语法是相同的。

2.3 文档模式

ie5.5引入了文档模式的概念,而这个概念是通过使用文档类型doctype切换实现的。

最初的两种文档模式,混杂模式quirks mode和标准模式 standard mode。

ie之后又提出了,所谓的准标准模式almost standards mode,这种模式下的浏览器特性有很多都是符合标准的,但是也不尽然。不标准的地方主要体现在处理图片间隙的时候(在表格中使用图片时问题最明显)

如果在文档开始处没有发现文档类型声明,则所有的浏览器都会默认开启混杂模式。但是采用混杂模式,并不是什么值得推荐的做法,因为不同浏览器在这种模式下的行为差异非常大。

1.对于标准模式,可以使用下面任何一种文档类型来开启

<!-- HTML 4.01 严格型 -->
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!-- XHTML 1.0 严格型 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!--HTML 5-->
<!DOCTYPE html>

2.对于准标准模式,可以通过使用transitional或frameset文档类型来触发

<!-- HTML 4.01 过渡型 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!-- HTML 4.01 框架集型 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <!-- XHTML 1.0 过渡型 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- XHTML 1.0 框架集型 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

准标准模式与标准模式非常接近,它们的差异几乎可以忽略不计。因此,当有人提到“标准模式”时,有可能是指这两种模式中的任何一种。而且检测文档模式时也不会发现什么不同。本书后面提到的标准模式时,指的是除混杂模式之外的其他模式。

2.4 <noscript>元素

早期的浏览器都面临一个特殊的问题,即当浏览器不支持JavaScript时,如何让页面平稳地退化。

解决方案是创造一个<noscript>元素,用以在不支持JavaScript的浏览器中显示替代内容。

这个元素可以包含在能够出现在文档<body>中的任何HTML元素--<script>元素除外。

包含在<noscript>元素中的内容只有在下列情况下才会显示出来:

1.浏览器不支持脚本

2.浏览器支持脚本,但是脚本被禁用

第二章 在Html中使用JavaScript的更多相关文章

  1. javascript高级程序设计第3版——第二章使用javascript

  2. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  3. Javascript高级程序设计读书笔记(第二章)

    第二章  在HTML中使用Javascript 2.1<script>元素 延迟脚本(defer = "defer")表明脚本在执行时不会影响页面的构造,脚本会被延迟到 ...

  4. JavaScript高级程序设计第三版-读书笔记(1-3章)

    这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript   提供核心语言功能 DOM     提供访问 ...

  5. javascript高级程序设计第三版书摘

    在HTML 中使用JavaScript <script>元素 在使用<script>元素嵌入 JavaScript 代码时,只须为<script>指定 type 属 ...

  6. DOM 操作技术【JavaScript高级程序设计第三版】

    很多时候,DOM 操作都比较简明,因此用JavaScript 生成那些通常原本是用HTML 代码生成的内容并不麻烦.不过,也有一些时候,操作DOM 并不像表面上看起来那么简单.由于浏览器中充斥着隐藏的 ...

  7. 10.2 DOM 操作技术【JavaScript高级程序设计第三版】

    很多时候,DOM 操作都比较简明,因此用JavaScript 生成那些通常原本是用HTML 代码生成的内容并不麻烦.不过,也有一些时候,操作DOM 并不像表面上看起来那么简单.由于浏览器中充斥着隐藏的 ...

  8. 2.1 <script>元素【JavaScript高级程序设计第三版】

    向 HTML 页面中插入 JavaScript 的主要方法,就是使用<script>元素.这个元素由 Netscape 创造并在 Netscape Navigator 2 中首先实现.后来 ...

  9. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

  10. 20.2 解析与序列化【JavaScript高级程序设计第三版】

    JSON 之所以流行,拥有与JavaScript 类似的语法并不是全部原因.更重要的一个原因是,可以把JSON 数据结构解析为有用的JavaScript 对象.与XML 数据结构要解析成DOM 文档而 ...

随机推荐

  1. SDK_按键消息的拦截

    按键消息的拦截 拦截是为了在原有功能的基础上增加自己的操作 扩展:当按钮接收到点击消息的时候,响应的是WM_LBUTTONDOWN消息,按钮的会被这个消息打包成一个WM_COMMAND 消息发送给父窗 ...

  2. CAD从二制流数据中加载图形(com接口Delphi语言)

    主要用到函数说明: _DMxDrawX::ReadBinStream 从二制流数据中加载图形,详细说明如下: 参数 说明 VARIANT varBinArray 二制流数据,是个byte数组 BSTR ...

  3. dom4j使用方法详解

    本文先做知识点的简单介绍,最后附完整案例. 一.解析XML文件 public class Foo { //url为XML文档地址 //自己封装了一个工具类 返回解析完成的document public ...

  4. 洛谷——P1156 垃圾陷阱

    P1156 垃圾陷阱 题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2 \le D \le 100)D(2≤D ...

  5. eclipse自动换行

    Eclipse是一款非常优秀的IDE,但是不能自动换行,需要安装一个插件完成这个功能. 安装办法有两种: 1.在线安装. 选择help-->install new software,点击Add, ...

  6. 10 Python中的代码缓存机制

    目录: 1) 什么是代码块 2) 基本原理 3) 机制适用范围 4) 适用对象 5) 优势 更详细说明,参考太白老师博客 https://www.cnblogs.com/jin-xin/article ...

  7. 团队开发git使用各种问题

    参考:https://www.cnblogs.com/schaepher/p/4933873.html 问题-3:保持github上项目干净,对于在不同机器上运行会不同的文件不予维护(如.idea/w ...

  8. hdu 5015 矩阵快速幂(可用作模板)

    转载:http://blog.csdn.net/wdcjdtc/article/details/39318847 之前各种犯傻 推了好久这个东西.. 后来灵关一闪  就搞定了.. 矩阵的题目,就是构造 ...

  9. poj 3923 模拟

    /* 1.判断是否是一个完整边框 2.判断是否长度和宽度小于3 3.判断是否有内部覆盖的现象 */ #include<stdio.h> #define N 110 #define inf ...

  10. FFT模板(From MG)

    #include<cstdio> #include<cmath> #include<algorithm> using namespace std; struct c ...