胖蔡说技术
随便扯扯

你真的会用script吗?noscript又是什么?

在Html中引入script脚本可以说是一大创举,它最早被网景公司在Netscape Navigator 2中实现。那么,script你真的会用script标签吗?通常我们说script是网页“动起来”的一个标志,为了更好的控制script脚本的加载时机,html规范规定了script的多个属性:

 

async

可选属性,用于表示立即开始下载脚本,但不能阻止其他页面动作,如下载资源、等待其他脚本下载。只对外部脚本有效。

charset

可选属性,用于配置src属性指定的代码字符集。基本可以忽略,大多浏览器已经做了兼容。

crossorigin

配置相关请求的CORS设置。默认不开启CORS。可以用来配置文件请求的凭据标志,默认不包含凭据。可能的值如下:

  • anonymous:不包含凭据
  • use-credentials:包含凭据

 

defer

表示文档解析和显示完成后再执行脚本,只对外部脚本有效。属于异步加载的一种方式。在IE7及更早版本,对行内script脚本也可以指定这个属性。

integrity

可选。允许对接收的资源和指定的加密签名以验证子资源的完成新。若接收到的资源签名与这个属性指定的签名不匹配,则页面报错,脚本停止执行。这个属性可以确保CDN不会提供恶意内容

 

src

可选属性,用于指定外部js的网络地址

 

type

可选属性。类似文件的Mimetype属性,默认为text/javascript,若是需要加载包含es模块的代码可以指定值为”module’。

 

nomodule

可选属性,兼容不支持ES6的浏览器,主要是IE11。

 

 

对于async、defer以及module,async情况下关于js的下载、解析任务拆分情况如下图:

d7431f53faf9eac

 

综上可以总结如下:

  • defer外部请求js与html异步请求,且defer会在html文档解析完成后再去执行js文件,即为js执行在domcontentload时间触发后再执行Js脚本。
  • async外部请求js时会异步文件,文件请求完成后会中断html的解析去执行js文件,js执行完成后若Html还未解析完成则继续进行html解析。
  • type=”module”的script标签若是未设置async或defer虎山行,则默认使用defer方式进行加载。
  • 如上type=”module”的fetch分叉为引入外部js的请求过程。

 

noscript

 

针对之前不支持js的浏览器的问题,需要一个页面降级处理的方式,其实也就是兼容提示处理。所以,有了noscript标签这样的一个规范,可以用来被使用提示不支持js的浏览器提供的替代内容。现在基本是用于被禁用js的浏览器,可以提示让它开启js支持。

 

<!DOCTYPE html>
<html>
<head>
<title>示例页面</title>
<script src="example01.js" defer></script>
</head>
<body>
<noscript>本页面需要浏览器开启js支持</noscript>
</body>
</html>

 

赞(0) 打赏
转载请附上原文出处链接:胖蔡说技术 » 你真的会用script吗?noscript又是什么?
分享到: 更多 (0)

请小编喝杯咖啡~

支付宝扫一扫打赏

微信扫一扫打赏