js高级程序设计(第三版)第二章:在HTML中使用JavaScript

xiaoxiao2021-02-28  23

本章内容

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

    一、使用<script>元素

      HTML4.01位<script>定义一下6个属性

async:可选。表示应该立即下载脚本,但不妨碍页面中的其他操作,只对外部文本文件有效。charset:可选。表示通过src属性指定的代码的字符集。defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效,IE7及更早的版本对嵌入脚本也支持这个属性。language:已废弃。src:可选。引入外部脚本文件。type:可选。表示编写代码使用的脚本语言的类型(也成MIME类型)。实际上服务器在传送JavaScript文件时使用的MIME类型通常是application/x-javascript,但在type中设置这个值可能导致脚本被忽略。

-----------------------------------------------------------------------------------------------------------------------

    包含在<script>元素内部的JavaScript代码将被从上到下的依次解析,在解析器对内部所有代码解析完毕以前,页面中的其余内容不会被浏览器加载或显示。

------------------------------------------------------------------------------------------------------------------------

    在使用<script>嵌入js代码时,不要在代码的任何一个地方出现“</script>”字符串。如:<script type="text/javascript">function sayScript(){

alert('</script>');

}</script>

因为当遇到“</script>”时,浏览器会认为是结束的</script>标签。但是可以通过转义字符“\”来解决。

<script type="text/javascript">function sayScript(){

alert('<\/script>');

}</script>

-----------------------------------------------------------------------------------------------------------------------

在解析外部js文件时,页面也会暂时停止,只有等外部页面下载、解析完成,才会执行后续工作。

注意:带有src属性的script元素不应该在其<script></script>标签之间再包含额外的代码,如果包含了嵌入代码,则只会下载并执行外部脚本文件,嵌入的代码会被忽略。

-----------------------------------------------------------------------------------------------------------------------

通过<script>元素的src属性还可以包含来自外部域的JavaScript文件。注意:利用这一点就可以在必要时通过不同的域来提供JavaScript文件,不过在访问自己不能控制的服务器上的JavaScript文件时则要小心。如果遇到怀有恶意的程序员,那他们随时都可能替换该文件中的代码。因此,如果想包含来自不同域的代码,要么你是这个域的所有者,要么这个域的所有这个值得信赖。

----------------------------------------------------------------------------------------------------------------------

标签的位置:    为防止在解析js文件代码时出现的阻塞情况,我们一般是把全部js放在body的后面。这也是前端性能优化的一种做法。

----------------------------------------------------------------------------------------------------------------------

延迟脚本:

    HTML4.01为<script>标签定义了defer属性,脚本就会被延迟整个页面都解析完成之后再执行。在HTML5规范要求脚本按照他们出现的顺序执行,因此第一个延迟的脚本会先于第二个延迟脚本执行,而这两个脚本会先于DOMContentLoaded事件执行。在现实中,延迟脚本并不一定会按照顺序执行,也不一定会在    DOMContentLoaded事件触发钱执行,因此最好只包含一个延迟脚本。

defer属性只适用于外部脚本文件。但,在IE4~IE7还支持对嵌入的脚本defer属性。

---------------------------------------------------------------------------------------------------------------------

异步脚本:

    async异步属性。在使用异步属性时确保各个文件之间互不依赖是非常重要的。因为标记async的脚本并不保证按照指定的他们的先后顺序执行。建议:异步脚本不要在加载期间修改DOM。异步脚本一定会在页面的load事件前执行。

---------------------------------------------------------------------------------------------------------------------

嵌入代码和外部文件:

    支持外部文件的人多于嵌入代码。优点有:

可维护性;可缓存;适应未来。

----------------------------------------------------------------------------------------------------------------------

文档模式

<!-- 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/xhtml-strict.dtd">

<!-- HTML 5  -->

<!DOCTYPE html>

---------------------------------------------------------------------------------------------------------------------

<noscript>元素:

    在以下情况会显示出来

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

    符合上面任何一条,就会显示<noscript>标签里面的内容,否则<noscript>里面的内容永远不会显示出来。

转载请注明原文地址: https://www.6miu.com/read-2350113.html

最新回复(0)