关于script标签,我们应该知道的

一、静态标签

1、<script>标签按照它们出现的顺序被执行,不管是script代码块还是script外链,都遵循先出现先执行的原则。这意味着如果你的网站有很慢的脚本在页面较前部分被加载,你的网页加载就会被显著拖慢。这也意味着后加载的脚本可以依赖先加载的脚本;
2、页面元素在它之前的所有脚本都加载完毕之前是不会执行渲染的,由此大段script代码可以引起页面加载卡顿;
3、当一个 <script>标签被执行,在它之前的 HTML 元素可以访问(哪怕只出现了半个标签,例如body),但是在它之后的还不能用;

二、动态标签

1、通过DOM规范添加到页面上的script标签会被正确插入并执行。通过innerHTML向页面添加script标签时,会正确植入一个新的script标签,但是不会被执行。通过innerText插入script标签时,只会在元素中插入对应的字符串,并不会真正 的植入一个新的标签;
2、通过DOM动态添加到页面上的script标签无法保证执行的先后顺序,浏览器根据请求完成的先后顺序会执行;

三、标签属性

1、async表示异步执行脚本,无法确保脚本在何时会被执行。defer表示推迟脚本执行,在整个页面加载完成之后会按序执行所有的defer脚本,此时可以访问页面中的所有元素;
2、自netscape2诞生以后,type=text/javascript就不是必填项。如果为script标签设置了一个非javascript的MIME类型,浏览器就不会执行他。通过以下meta标签来修改页面中script标签的默认type值:

<meta http-equiv="Content-Script-Type" content="text/vbscript">

3、integerity属性可以为script标签提供一个hash值,用以进行资源完整性的安全检查功能:

<script src="//code.jquery.com/jquery.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC">
</script>

四、特殊API

1、新规范中,document.currentScript返回当前正被执行的script标签元素;
2、HTML5规范中新增了一种曾经IE用来为script标签绑定事件的语法:for/event。但是实际情况下,其他浏览器并未支持该功能:

<script for="window" event="onload">
  alert("Hi!")
</script>

3、 <noscript> 标签里的内容只有浏览器不支持脚本的时候才会被渲染出来,noscript 不接受 type 参数:

<noscript>
  Please use Internet Explorer 5.5 or above.
</noscript>

猜你喜欢

转载自blog.csdn.net/yuhk231/article/details/87930055