script元素的8个属性
- async:可选,表示立即开始下载脚本,但不能阻止其他页面动作,比如下载资源或等待其它脚本下载。只对外部脚本文件有效。
- charset:可选,使用src属性指定的代码字符集。很少使用,因为大多数浏览器不在乎它的值。
- crossorigin:可选,配置相关请求的CORS(跨域资源共享)设置。默认不使用CORS.
crossorigin="anonymous"配置文件请求不必设置凭据标志。
crossorigin="use-credentials"设置凭据标志,意味着出站请求会包含凭据。 - defer:可选。表示在文档解析和显示完成后再执行脚本是没有问题的。只对外部脚本有效。在IE7及更早的版本中,对行内脚本也可以指定这个属性。
- integrity:可选。允许比对接收到的资源和指定的加密签名以验证子资源完整性。如果接受到的资源的签名和这个属性指定的签名不匹配,则页面会报错,脚本不会执行。这个属性可以用于确保内容分发网络不会提供恶意内容。
- language:废弃。最初用来表示代码块中的脚本语言。
- src:可选。要执行的代码的外部文件。
- type:可选。代替language。表示代码块中脚本语言的内容类型。
注:
- 要使用外部文件中的JavaScript,就必须使用src属性。与解释行内JavaScript一样,在解释外部JavaScript文件时,页面也会阻塞。(阻塞时间也包含下载文件时间)
- 使用了src属性的script元素不应该再在标签中包含其他的js代码,如果两者都提供的话,浏览器只会下载并执行脚本文件,从而忽略行内代码。
- script元素可以包含来自外部域的js文件。跟img元素很像,script元素的src属性可以是一个完整的url,而且这个url可以跟包含它的html页面不在同一个域中,浏览器在解析这个资源是会向url发送一个get请求,去获取资源,这个初始的请求不收浏览器同源策略限制,但返回的js则受限制,这个请求仍然受父页面http/https协议的限制。引用外域js文件时要格外小心,确保外域文件的安全,javascript标签的integerity可防范这种问题(不是所有浏览器都支持)
- 没有使用async和defer属性的script,浏览器会按照script在浏览器中的顺序依次执行
- 为了防止js加载导致页面空白,JavaScript通常放在body元素后面。