美文网首页
JavaScript高级程序设计(第二版)随录02

JavaScript高级程序设计(第二版)随录02

作者: Orson1225 | 来源:发表于2019-01-03 15:14 被阅读0次

第二章    在HTML中使用JavaScript

问题:如何做到让JavaScript既能与HTML页面共存,又不影响页面在浏览器中的呈现效果?

answer:为Web增加统一的脚本支持。

向HTML页面中插入JavaScript的主要办法,就是使用<script>元素。

HTML4.01为<script>定义了下列5个属性:

    -charset:可选。表示通过src属性指定的代码的字符集。由于大多数浏览器会忽略它的值,因此这个属性很少有人用。

    -defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。

    -language:已废弃。原来用于表示编写代码中使用的脚本语言,大多数浏览器会忽视这个属性。

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

    -type:必需。可以看成是language的代替属性,表示编写代码使用的脚本语言的内容类型。

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

2.在解析外部嵌入式JavaScript代码时,页面的处理会暂时停止。

3.浏览器会按照<script>元素在页面中出现的先后顺序对他们依次解析,即等第一个<script>元素包含的代码解析完成后,第二个<script>元素包含的代码才会被解析,然后才是第三个、第四个……

<script>的src属性可以指向当前HTML页面所在域之外的某个域中的URL,即可以通过不同的域来提供JavaScript文件。但是,在访问自己不能控制的服务器上的JavaScript文件时则要多加小心,可能会遇到恶意程序员替换该文件中的代码。因此,如果想包含来自不同域的代码,要么你是那个域的owner,要么那个域的所有者值得信赖

标签的位置

如果在文档的<head>元素中包含所有JavaScript文件,就必须等全部的JavaScript代码都被下载。解析和执行完成以后,才能开始呈现页面的内容,导致在浏览器在呈现页面时出现明显的延迟,则浏览器窗口中将是一片空白。为了避免这个问题,Web应用程序都会把全部JavaScript引用放在<body>元素中,放在页面内容后面

延迟脚本(defer属性)

<script>标签定义了defer属性,用途是表明在执行时不会影响页面的构造(JavaScript文件放在文档的<head>元素中),即脚本会被延迟到整个页面都解析完毕后再运行,与把<script>元素放在页面最底部的效果一样。

但是虽然我们把<script>元素放在了文档的<head>元素中,其中包含的脚本延迟到浏览器遇到</html>标签后再执行,不过,问题是并非所有的浏览器都支持defer属性,可能会被浏览器忽略这个属性。

在XHTML中的用法

可扩展超文本标记语言,即XHTML(Extensible HyperText Markup Language),是将HTML作为XML的应用而重新定义的一个标准。

在HTML中,有特殊的规则用以确定<script>元素中的哪些内容可以被解析,但是这些特殊的规则在XHTML中不适用,会在XHTML中出现类似的语法错误,例如语句中的小于号(<),会在XHTML中被当作开始一个新标签来解析。解决办法有两,一是用相应的HTML实体(&lt;)替换代码所有的小于号(<);二是用CData片段来包含JavaScript代码。

在XHTML中,CData片段是文档中的一个特殊区域,这个区域可以包含不需要解析的任意格式的文本内容。因此,在CData片段中就可以使用任意字符——小于号当然也没问题。

<script type="text/javascript">

//<![CDATA[

……(JavaScript代码)

//]]>

</script>

文档模式

文档模式概念是通过使用文档类型(doctype)切换实现的。

最初的两种文档模式是:混杂模式和标准模式。

HTML5的标准模式为<!DOCTYPE html>;如果在文档开始处没有发现文档声明,则所有浏览器都会默认开启混杂模式,一般不推荐这种做法,因为不同浏览器在这种文档模式下的行为差异非常大,不使用hack技术,跨浏览器的行为根本就没有一致性。

这两种模式主要影响CSS内容的呈现,但在某些情况下也会影响到JavaScript的解析执行。

<noscript>元素

问题:当浏览器不支持JavaScript时如何让页面平稳地退化。

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

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

相关文章

网友评论

      本文标题:JavaScript高级程序设计(第二版)随录02

      本文链接:https://www.haomeiwen.com/subject/npixrqtx.html