我们在 《Javascript简史》这遍文章中说过,「Javascript」这门语言是由 Netscape开发而来,当初开发的时候为了能让 「Javascript」这门语言能与 HTML 页面共存,而且不影响页面的其他内容,为此增加了一个统一的脚本支持( script 脚本元素)。

script 元素

在 HTML 页面中使用「Javascript」语言主要的方法就是使用 script 元素,script 元素内部的代码从上而下依次执行。

在引入多个 script 元素的时候,浏览器会按照 script 元素在页面的中的先后顺序进行解析,当上一个解析完成时,才会进行下一个 script 元素中的内容

在 HTML 中使用 Javascript 的两种方法

//第一种方法:直接在标签内使用 javascript 即可
<script>
console.log('第一种使用方法');
</script> //第二种方法:引用外部文件
<script src="example.js"></script>

script 元素的属性

script 元素比较常用的几个属性

  • src:可选,用于引用外部 javascript 文件
  • type:可选,编写代码使用的脚本语言的类型(也成MIME类型),默认值为 text/javascript
  • async:可选,异步加载脚本,只对外部脚本文件有效
  • defer:可选,延迟脚本加载,在文档完全被解析后在执行,只对外部脚本文件有效

script 元素在 HTML 中的位置

由于「Javascript」语言是一门单线程语言,在同一时间内,只能执行一个任务,所以只有当上一个任务完成之后才能进行下一个任务,因此会导致 script 元素在 HTML 中的位置不同,会表现出不同效果。

所有 script 元素都放在 <head> 元素中

这种做法意味着,我们必须等待所有的 Javascript 代码必须执行完成之后才能开始展示页面的内容,如果页面的 Javascript 代码非常多,这种方法就会导致我们看到页面的加载会非常慢,用户体验非常差,那么这么样去优化呢?其实很简单。

<!DOCTYPE html>
<html>
<head>
<title></title>
<script src="example1.js"></script>
<script src="example2.js"></script>
</head>
<body>
<div>页面的内容区域</div>
</body>
</html>

所有 script 元素都放在页面内容的后面

优化上面所说的页面加载慢的问题,只需要把我们使用的 Javascript 代码放到页面的内容之后即可,这样页面会首先加载内容然后现实出来,再去执行 Javascript 代码,这样用户就不会等待很久页面才会显示内容。

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<div>页面的内容区域</div>
<script src="example1.js"></script>
<script src="example2.js"></script>
</body>
</html>

脚本的延时加载

脚本如何进行延时加载,这个就要利用 script 元素的 defer 属性,在元素使用 defer 属性时,脚本会被延迟到整个页面解析完成后在执行。

//example1.js 中的代码
//console.log('example1');
//console.log(document.getElementById('content')); //example2.js 中的代码
//console.log('example2');
//console.log(document.getElementById('content')); <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script defer src="example1.js"></script>
<script defer src="example2.js"></script>
</head>
<body>
<div id="content">这里页面的内容</div>
</body>
</html>

你会发在没有加入 defer 属性时控制台会打印出如下结果

example1
null
example2
null

当给元素加上 defer 属性时,结果会发生变化,可以发现在 div 元素的内容加载完成之后 Javascript 代码才会执行。

example1
<div id="content">这里页面的内容</div>
example2
<div id="content">这里页面的内容</div>

脚本的异步加载

脚本的异步加载,要用到 script 元素到 async 属性,它与 defer 属性类似,都是修改 script 元素的加载行为,不过 async 属性不会影响页面的其他加载,不会阻塞文档呈现,而且带有 async 属性的脚本不能保证它们执行的前后顺序,这一点与 defer 属性有着不同之处。

换句话说 example2.js 的代码可能会先于 example1.js 中的代码执行,所以在使用 async 属性时,要避免两个 js 相互依赖。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script async src="example1.js"></script>
<script async src="example2.js"></script>
</head>
<body>
<div id="content">这里页面的内容</div>
</body>
</html>

noscript 元素

早期的浏览器都会又一个问题,那就是当浏览器不支持 Javascript 语言时如何显示页面内容,为此的解决方案就是创建了一个 noscript 元素,它可以在不支持 Javascript 的浏览器中显示内容,而且只会在不支持 Javascript 的浏览器中才会显示其中的内容。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script async src="example1.js"></script>
<script async src="example2.js"></script>
</head>
<body>
<noscript>
当前浏览器不支持 Javascript 请更换浏览器
</noscript>
</body>
</html>

说一说 HTML 中的 script 标签的更多相关文章

  1. js中的script标签

    在页面中用script标签引入javascript文件(<script type="text/javascript" src="js文件地址">&l ...

  2. 关于html中的 script标签中的 代码写法有效性? easyui tabs的href不能载入内容页面

    script标签, 即 html中的 js脚本区域中: 它其实就是一个 普通的 html标签, 在 html 渲染器 parser 看来, 它跟其他任何的普通 的 html标签 , 比如 p 标签, ...

  3. js中的script标签属性

    HTML <script> 元素用于嵌入或引用可执行脚本. 在html中插入一个script标签 <script src="index.js" sync cros ...

  4. 前端中的script标签

    script标签中的重要属性! . 浏览器解析行内脚本的方式决定了它在看到字符串时,会将其当成结束的 标签.想避免这个问题,只需要转义字符"\" ①即可: 要包含外部文件中的 Ja ...

  5. angularjs 1 如何在ng-route的模板中使用script标签

    如果你在angularjs 的路由模板里使用<script>标签的话,你会发现标签不起作用.这是因为angular为了安全起见而禁止了模板执行script.如果一定要在路由模板里使用scr ...

  6. html 中的<script>标签

    https://www.w3.org/TR/html51/semantics-scripting.html#the-script-element 一. <script type='text/ja ...

  7. script标签中defer和async属性的区别

    这篇文章来源于JS高级程序设计第三版中关于script标签的介绍,结合查阅的资料写下的学习笔记. 向html页面中插入javascript代码的主要方法就是通过script标签.其中包括两种形式,第一 ...

  8. script标签里的defer属性

    入职新公司,看代码的时候注意到有的script标签中有一个defer属性,查了一下.在这里分享出来. 需要注意的有三点,其中前两点是在错误中分辨出来的: 错误来源:http://www.w3schoo ...

  9. 页面动态加入<script>标签并执行代码

    在页面中动态追加html片段的时候,有时候动态添加的代码会含有<script>标签,比如用了一些模板引擎,或者你的代码有些复杂的时候.然而我们用DOM提供的innerHTML方式来添加代码 ...

随机推荐

  1. 正则表达式grep学习(一)

    文本处理三剑客grep       文本过滤sed       流过滤awk       格式处理 正则表达式就是一些特殊字符组成的模式,赋予了他特定的含义 在大多数程序里,正则表达式都被置于两个正斜 ...

  2. ORs-4-Enhanced Role of OR Gene Loss (Pseudogenization) in Birds

    Enhanced Role of OR Gene Loss (Pseudogenization) in Birds 1.因为文献已经证明(a)基因缺失和得到对于进化有影响,(b)大的基因家族对进化影响 ...

  3. jmeter测试get post 笔记

    0 环境 系统环境:win7 1 操作 1 post 新建线程组 2 get 和post新建类似 http请求 只是新建一个参数化我测试的2个url http://127.0.0.1:8080/cry ...

  4. CLOUD信用管理设置

    1.参数设置(管理员账户) 2.客户管理-信用管理设置 3.信用检查规则设置 4.信用档案设置 5.涉及集团公司,母公司与子公司的设置 6.信用档案-对象类型可为客户及集团客户 7.信用特批权限设置 ...

  5. Python常用的数据结构详解

    数据结构:通俗点说,就是储存大量数据的容器.这里主要介绍Python的4种基本数据结构:列表.字典.元组.集合. 格式如下: 列表:list = [val1,val2,val3,val4],用中括号: ...

  6. HashMap、Hashtable、ConcurrentHashMap、ConcurrentSkipListMap对比及java并发包(java.util.concurrent)

    一.基础普及 接口(interface) 类(class) 继承类 实现的接口 Array √ Collection √ Set √ Collection List √ Collection Map ...

  7. Mac下通过FFMpeg实现Android手机推流和播放

    一.Mac下搭建推流服务器(Nginx+RTMP+FFMpeg) 安装x264 git clone git://git.videolan.org/x264.git cd x264 ./configur ...

  8. [LC] 235. Lowest Common Ancestor of a Binary Search Tree

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS ...

  9. 跨域带cookie失效的解决方案

    在webpack的tableproxy那儿配置完跨域以后,想给cookie添加domain以便请求的时候带上cookie domain为localhost,cookie不会失效,但是一但改成baidu ...

  10. JAVAscript的DOM操作及实例

    一.Windows对象操作 (1)用代码打开窗口:window.open("第一部分","第二部分","第三部分","第四部分&q ...