第二章在HTML中使用JavaScript
本章内容:
- 使用<script>元素
- 嵌入脚本与外部脚本
- 文档模式对JavaScript的影响
- 考虑禁用JavaScript的场景
2.1
<__script>__定义了6个属性,其中一些已经用不上了:
-
async:可选。表示立即下载脚本,但是不妨碍页面加载其他内容,是一个异步的操作。且只对外部脚本文件有效。
-
charset:可选。表示通过src属性指定的代码的字符集,大多数浏览器会忽略他的值,所以现在很少人写。弃用
-
defer:可选。表示脚本可以延迟到文档完全被解析和显示之后在执行。即先加载页面内容再加载外部脚本文件。是一个同步的操作。且只对外部脚本文件有效,
-
language:已废弃。原本用于区分JavaScript、JavaScript1.2、vbscript。
-
src:可选。表示包含要执行代码的外部文件。
-
type:可选。可看成是language的替代品,便是编写代码使用的脚本语言的内容类型(也称MIME类型)。一般使用text/JavaScript。默认值也是这个。
关于<script>需要注意一下几点:
-
使用<script>嵌入JavaScript代码时,只需指定type属性(text/JavaScript)。
-
包含在<script>元素内部的代码将被从上至下依次解释,也就是说如果代码放在里,页面其余内容不会被浏览器解释加载显示,直到加载完<script>代码。
-
在使用<script>嵌入JavaScript代码时,记住不要再代码中的任何地方出现字符串,如果非要用到的话,就用反斜杠解决"</script>",否则浏览器遇到就认为JavaScript代码已经结束。
-
在解析外部的js文件(包括下载该文件)时,页面的处理也会暂停。外部js文件必须以.js为后缀为扩展名。因为服务器通常需要看扩展名决定响应应用那种MIME类型。
-
src引入外部脚本文件时,<script></script>之间不能嵌入JavaScript代码,因为嵌入的代码会被忽略。
-
无论<script>如何包含代码,只要不出席那defer和async属性,浏览器就会按照<script>元素在页面中的先后顺序对他们依次进行解析。
2.1.1 标签的位置
只有一点:就是<script>嵌入JavaScript脚本文件放在之前,所有里面的页面节点之后.
因为如果所有<script>嵌入的js脚本文件都放在,会导致,意味着必须等到全部 JavaScript代码都被下载、 解析和执行完成以后,才能开始呈现页面的内容,这样会出现显示的延迟.<script>嵌入的js脚本文件都放在,会导致,意味着必须等到全部 JavaScript代码都被下载、 解析和执行完成以后,才能开始呈现页面的内容,这样会出现显示的延迟。
2.1.2 延迟脚本
也只有一点就是:
defer属性:
虽然我们把<script>元素放在了文档的元素中,但其中包含的脚本将延迟 到浏览器遇到标签后再执行。但是延迟脚本不一定会按照顺序执行。且只适用外部脚本文件。
2.1.3 异步脚本
也只有一点就是:
async属性:
也只适用外部脚本文件,async属性的目的不让页面等待脚本的下载和执行,从而异步加载页面其他内容。但是强调,建议异步脚本不要在加载期间修改 DOM。
2.1.4 在XHTML中的用法(弃用,不写笔记了,跳过)
2.1.5 不推荐的语法,现在没有不兼容JavaScript的浏览器了,所以也不写笔记了。
2.2 嵌入代码与外部文件
支持使用引入外部文件的优点:
- 可维护性:JavaScript在同一个文件夹中,维护起来相比在html中轻松多了。而且开发人员因此也能够在不触及 HTML标记的情况下, 集中精力编辑 JavaScript代码。
- 可缓存:浏览器能够根据具体设置缓存链接的所有外部JavaScript文件,如果两个页面都使用同一个文件,那么这个文件只需下载一次。因此,终结果就是能够加快页面加载的速度。
2.3 文档模式(待补充)
标准模式与怪异模式
1)盒模型:
IE下标准模式为:content+padding+border+margin。怪异模式下为:content+margin(padding,border包含在content宽高中)
2)怪异模式中IE6/7/8都不识别!
3)设置行内元素宽高,标准模式下不生效,怪异模式下生效
4)margin:0 auto,在标准模式下会水平居中,怪异模式下不会。
2.4 元素
目的时早期浏览器不支持JavaScript,让页面平稳的退化。当满足下面两个条件时元素内容才会显示:
- 浏览器不支持脚本;
- 浏览器支持脚本,但脚本会被禁用;
<body>
<noscript>
浏览器不支持JavaScript脚本或者JavaScript脚本被禁用,请手动打开!
</noscript>
</body>