美文网首页
JS高程红宝读书笔记01 - 在html中使用javascrip

JS高程红宝读书笔记01 - 在html中使用javascrip

作者: kylewh | 来源:发表于2016-11-28 11:15 被阅读0次

在html中使用javascript

1.内嵌式:

一般在<body>标签的尾部添加<script>标签,并且指定type="text/javascript"
比如这样:

<html>
    <head>
    </head>
    <body>
        <!--内容-->
        <script type="text/javascript">
            console.log('Tag should be here');
        </scipt>
    <body>
</html>

这样的好处是:

  1. 避免脚本加载阻塞文档渲染
  2. 避免脚本操作DOM时文档流未渲染完毕导致获取DOM元素失败。

看个例子:

<html>
    <head>
        <script type = "text/javascript">
                let btn = document.getElementsByTagName('button')[0];
                // do sth with btn
                // error 
        </script>
    </head>
    <body>
        <!-- content here -->
                <button>按钮</button>
    </body>
</html>

报错:


原因是先加载了脚本内的内容,而此时文档流未渲染,并没有<button>标签存在,所以获取button得到的结果为undefined.

解决办法
将script里的内容放置到window.onload{ }里,在文档加载完成后会触发load事件。此时,在文档中的所有对象都在DOM中,所有图片,脚本,链接以及子框都完成了加载。

2.外部引入

外部引入JS脚本文件作为最佳实践,src作为外部引入资源的重要属性,用来指定外部资源的引入路径,可以是相对路径,也可以是绝对路径:

<html>
    <head>
        <script type = "text/javascript" src="js/相对路径.js"></script>
        <script type = "text/javascript" src="desktop/example/js/绝对路径.js"></script>
    </head>
    <body>
        <!-- content here -->
    </body>
</html>

同样,如同嵌入式JS一样,外部引入JS同样也需要考虑使得文档流优先加载的问题。

延迟脚本

使用defer表明外部引入的脚本将按照它们出现的顺序先后执行,也就是说先出现的脚本会先执行,然后再到后者。但是在现实里,延迟脚本不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,因此最好只包含一个延迟脚本。(顺序得不到保障,无法保证预期效果,容易出错)

<html>
    <head>
        <script type="text/javascript" defer="defer" src="我会先执行.js"></script>
        <script type="text/javascript" defer="defer" src="我会后执行.js"></script>
    </head>
    <body>
        <!-- content here -->
    </body>
</html>

异步脚本

async表示浏览器立即下载物件,但是不保证执行先后顺序,指定为async的目的是不让页面等待两个脚本的下载和执行,从而可以异步加载页面其他内容。所以设为async的脚本最好不要进行dom操作,否则有可能出现加载页面时出现错误。

<html>
    <head>
        <script type="text/javascript" defer="defer" src="我不一定第二个执行.js"></script>
        <script type="text/javascript" defer="defer" src="我不一定第二个执行.js"></script>
    </head>
    <body>
        <!-- 我不会等待两个脚本文件的加载,我会直接进行页面渲染 -->
    </body>
</html>

相关文章

  • JS高程红宝读书笔记01 - 在html中使用javascrip

    在html中使用javascript 1.内嵌式: 一般在 标签的尾部添加 标签,并且指定type="text/j...

  • JS高程(一)

    复习 JavaScript 高程, 基本上 是 摘抄原文。 在 HTML 中 使用 JavaScript JS 包...

  • js文件位置+白屏+async+浏览器渲染机制

    CSS和JS在网页中的放置顺序是怎样的? 为什么引入js文件? 因为网页 = Html+CSS+JavaScrip...

  • JavaScript入门

    JavaScript入门 在html中使用javascript JavaScript-输出内容 JavaScrip...

  • js

    js 代码: document.write(); //输出函数 操作 HTML 元素 如需从 JavaScrip...

  • js支付宝调用扫一扫接口

    在html文档head标签中引用支付宝文档 js中

  • 第二章 在html中使用js

    1在html 中的使用js有三种方法 1.1 在html 用script 标签直接把js代码加到html文件中 1...

  • 可能碰到的iOS笔试面试题(17)--WebView与JS交互

    WebView与JS交互 iOS中调用HTML 在HTML中调用OC JavaScriptCore 使用 Java...

  • 【js高程第2章】 — 在html中使用JavaScript