Js高程第二章 在HTML中使用JavaScript

我心飞翔 分类:javascript

向HTML内插入JavaScript的主要方法

graph TD
A[<script> 元素] --> B[async 属性]
A --> C[charset 属性]
A --> D[defer 属性]
A --> E[language 属性]
A --> F[src 属性]
A --> G[type 属性]

charset、languase多数情况下会被忽略。
async 可选 表示立即下载脚本但不妨碍页面其他操作。
defer 可选 表示表示延迟到页面全部下载完成并且显示之后,再下载脚本。
src 可选 嵌入的外部脚本代码。
type 可选 表示编写代码使用的脚本语言的内容类型(也称为MIME类型)默认 text/javascript

使用方法共两种
1.直接在<script>内部编写代码
2.scr包含外部代码文件
包含在<script>内部的javascript代码将会被从上到下依次解释。

<script type="text/javascript">
    function hlwd(){
        alert('hellow word')
    }
</script>
 

解释器会解释函数定义,然后保存在自己的环境当中。在javascript内的所有方法执行完成之前页面的其余内容不会被浏览器加载和显示。
前端框架 创建完虚拟Dom 挂载之后 浏览器显示Dom

Dom树构建例子
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <script src="./js.js" async></script> -->
    <!-- 
    此处如果没有添加 async 或者 defer 属性 则会报错append undefine
    这是因为没有获取到dom节点的原因 因为js阻塞的原因 下面的body还没有
    构建dom树所以获取不到 添加属性相当于将引入的代码加到最后面 由浏览器的
    预加载扫描器 进行提前加载 或者下载
    -->
</head>
<body>
    <div>1111</div>
    <!-- 
        此时的Dom树 
        <body>
            <div>1111</div>
        </body>
    -->
    <script defer>
        document.getElementsByTagName('body')[0].append('3333')
    </script>
    <!-- 
        因为阻塞原因此时的Dom树为
        <body>
            <div>1111</div>
        </body>
        所以
        document.getElementsByTagName('body') 获得到的Dom树为以上内容
        所以
        append()添加的内容会在1111之后
        现在的Dom树为
        <body>
            <div>1111</div>
            <div>3333</div>
        </body>
    -->
    <div>2222</div>
    <!--
        现在的Dom树为
        <body>
            <div>1111</div>
            <div>3333</div>
            <div>2222</div>
        </body>
    -->
</body>
</html>
 
小结 照搬

把 JavaScript 插入到 HTML 页面中要使用<script>元素。使用这个元素可以把 JavaScript 嵌入到
HTML 页面中,让脚本与标记混合在一起;也可以包含外部的 JavaScript 文件。而我们需要注意的地方有:

  1. 在包含外部 JavaScript 文件时,必须将 src 属性设置为指向相应文件的 URL。而这个文件既可以是与包含它的页面位于同一个服务器上的文件,也可以是其他任何域中的文件。\
  2. 所有<script>元素都会按照它们在页面中出现的先后顺序依次被解析。在不使用 defer 和async 属性的情况下,只有在解析完前面<script>元素中的代码之后,才会开始解析后面<script>元素中的代码。\
  3. 由于浏览器会先解析完不使用 defer 属性的<script>元素中的代码,然后再解析后面的内容,所以一般应该把<script>元素放在页面最后,即主要内容后面,</body>标签前面。\
  4. 使用 defer 属性可以让脚本在文档完全呈现之后再执行。延迟脚本总是按照指定它们的顺序执行。\
  5. 使用 async 属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行。\

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

回复

我来回复
  • 暂无回复内容