美文网首页
《JavaScript高级程序设计》(第4版)笔记2

《JavaScript高级程序设计》(第4版)笔记2

作者: 0清婉0 | 来源:发表于2021-04-27 21:10 被阅读0次

    第2章 HTML中的Javascript

    一、<script>元素

    通过它直接在网页中嵌入JavaScript代码,以及通过它在网页中包含外部JavaScript文件。

    8个属性:

    ❑ async:可选。表示应该立即开始下载脚本,但不能阻止其他页面动作,比如下载资源或等待其他脚本加载。只对外部脚本文件有效。

    ❑ charset:可选。使用src属性指定的代码字符集。这个属性很少使用,因为大多数浏览器不在乎它的值。

    ❑ crossorigin:可选。配置相关请求的CORS(跨源资源共享)设置。默认不使用CORS。crossorigin="anonymous"配置文件请求不必设置凭据标志。crossorigin="use-credentials"设置凭据标志,意味着出站请求会包含凭据。

    ❑ defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。在IE7及更早的版本中,对行内脚本也可以指定这个属性。

    ❑ integrity:可选。允许比对接收到的资源和指定的加密签名以验证子资源完整性(SRI, Subresource Integrity)。如果接收到的资源的签名与这个属性指定的签名不匹配,则页面会报错,脚本不会执行。这个属性可以用于确保内容分发网络(CDN, Content Delivery Network)不会提供恶意内容。

    ❑ language:废弃。

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

    ❑ type:可选。代替language,表示代码块中脚本语言的内容类型(也称MIME类型)。按照惯例,这个值始终都是"text/javascript",尽管"text/javascript"和"text/ecmascript"都已经废弃了。如果这个值是module,则代码会被当成ES6模块,而且只有这时候代码中才能出现import和export关键字。

    行内JavaScript代码,直接把代码放在<script>元素中就行:

    <script type = "text/javascript">

    function () {

        alert("Hello world!")

    }

    </script>

    外部引用JavaScript

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

    注意:使用了src属性的<script>元素不应该再在<script>和</script>标签中再包含其他JavaScript代码。如果两者都提供的话,则浏览器只会下载并执行脚本文件,从而忽略行内代码。

    浏览器解析JavaScript文件顺序:

    不存在defer和async属性的<script>中,浏览器会按照<script>元素在HTML中出现的先后顺序进行解析。

    二、标签位置

    过去,都放在页面的<head>标签内。缺点就是必须把所有JavaScript代码都下载、解析和解释完成后,才能开始渲染页面(页面在浏览器解析到<body>的起始标签时开始渲染),导致页面渲染的明显延迟,在此期间浏览器窗口完全空白。

    为解决这个问题,现代Web应用程序通常将所有JavaScript引用放在<body>元素中的页面内容后面。浏览器显示空白页面的时间缩短。

    三、推迟执行脚本(外部脚本)

    defer属性:脚本会被延迟到整个页面都解析完毕后执行,相当于告诉浏览器立即下载脚本,但是等所有文件被解析完毕后再解析带有defer属性的<script>引入的JavaScript代码。

    在实际当中,推迟执行的脚本不一定总会按顺序执行或者在DOMContentLoaded事件之前执行,因此最好只包含一个这样的脚本。

    四、异步执行脚本(外部脚本)

    async属性:不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。建议异步脚本不要在加载期间修改DOM。

    异步脚本一定会在load事件前执行,但可能会在DOMContentLoaded事件触发之前或之后执行。

    五、动态加载脚本

    let script = document.createElement('script');

    script.src = 'gibberish.js';

    script.async = false;

    document.head.appendChild(script);

    六、<noscript>元素

    用在不支持JavaScript的浏览器中显示替代的内容。

    小结:

    ❑ 要包含外部JavaScript文件,必须将src属性设置为要包含文件的URL。文件可以跟网页在同一台服务器上,也可以位于完全不同的域。

    ❑ 所有<script>元素会依照它们在网页中出现的次序被解释。在不使用defer和async属性的情况下,包含在<script>元素中的代码必须严格按次序解释。

    ❑ 对不推迟执行的脚本,浏览器必须解释完位于<script>元素中的代码,然后才能继续渲染页面的剩余部分。通常应该把<script>元素放到页面末尾,介于主内容之后及</body>标签之前。

    ❑ 可以使用defer属性把脚本推迟到文档渲染完毕后再执行。

    ❑ 可以使用async属性表示脚本不需要等待其他脚本,同时也不阻塞文档渲染,即异步加载。异步脚本不能保证按照它们在页面中出现的次序执行。

    ❑ 通过使用<noscript>元素,可以指定在浏览器不支持脚本时显示的内容。如果浏览器支持并启用脚本,则<noscript>元素中的任何内容都不会被渲染。

    相关文章

      网友评论

          本文标题:《JavaScript高级程序设计》(第4版)笔记2

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