We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
<script>
<script> 标签的执行会阻塞页面其他资源的解析,默认情况下加载也会阻塞页面的解析,除非使用 async 或 defer
async
defer
async:和页面同时加载(不阻塞页面),加载完成之后会立即执行,不保证页面渲染完成。只支持外部 script
defer:和页面同时加载,然后等待页面解析完成之后再执行。只支持外部 script
crossorigin:crossorigin="anonymous" 不发送跨域 credential,crossorigin="use-credentials" 会发送
crossorigin
crossorigin="anonymous"
crossorigin="use-credentials"
integrity:可以传入资源的加密的签名,以监测 JS 是否被恶意篡改。有些浏览器不支持
integrity
language:已经废弃,请使用 type
language
type
type:MIME type。text/javascript 和 text/ecmascript 已经废弃。现在一般是 application/javascript 和 application/ecmascript
text/javascript
text/ecmascript
application/javascript
application/ecmascript
module
src:都懂
src
如果 inline script 写在了外部 script 标签内,一般 inline script 会被忽略
如果没有 async 和 defer,自上而下,写在前面的先执行
如果同时有几个 defer,一般也是写在前面的先执行(HTML5 规定),但是不同浏览器有差异,所以还是要注意
通过 src 下载的 JS 资源(GET 请求),不受浏览器 CORS 策略限制(JSONP 就是利用这个原理)
过去,为了好看整齐,都统一放在 <head></head> 里面,但是 HTML 是从上而下加载的,如果 JS 内容很多,会阻塞 DOM 的解析,从而导致很长的白屏时间
<head></head>
现在推荐放在 <body></body> 标签里面,</body> 之前,可以等 DOM 完全渲染之后再处理,提升用户体验
<body></body>
</body>
HTML5 的 defer 属性,就可以放在在 <head> 里面了
<head>
HTML5 规定含有 defer 的 script 标签需要按顺序执行,但是有些浏览器并没有遵守
HTML5 规定含有 defer 的 script 需要在 DOMContentLoaded 事件触发之前执行,但是有些浏览器没有遵守
DOMContentLoaded
defer 会等到页面渲染完成之后执行脚本
与 defer 不同,async 不保证脚本的执行顺序
async 的脚本会在页面 load 事件之前执行,但是不保证与 DOMContentLoaded 事件触发的先后顺序
load
let script = document.createElement('script'); script.src = 'gibberish.js'; document.head.appendChild(script);
<noscript>
冷知识,如果浏览器不支持 JS(现在 应该没有这种浏览器了)或者禁用了 JS,则 <noscript></noscript> 内的内容就会渲染出来
<noscript></noscript>
<noscript> <p>你的浏览器无法使用 JavaScript</p> </noscript>
The text was updated successfully, but these errors were encountered:
No branches or pull requests
<script>
标签标签重要属性
<script>
标签的执行会阻塞页面其他资源的解析,默认情况下加载也会阻塞页面的解析,除非使用async
或defer
async
:和页面同时加载(不阻塞页面),加载完成之后会立即执行,不保证页面渲染完成。只支持外部 scriptdefer
:和页面同时加载,然后等待页面解析完成之后再执行。只支持外部 scriptcrossorigin
:crossorigin="anonymous"
不发送跨域 credential,crossorigin="use-credentials"
会发送integrity
:可以传入资源的加密的签名,以监测 JS 是否被恶意篡改。有些浏览器不支持language
:已经废弃,请使用type
type
:MIME type。text/javascript
和text/ecmascript
已经废弃。现在一般是application/javascript
和application/ecmascript
module
,则可以使用 ES6 Modulesrc
:都懂解析
如果 inline script 写在了外部 script 标签内,一般 inline script 会被忽略
如果没有
async
和defer
,自上而下,写在前面的先执行如果同时有几个
defer
,一般也是写在前面的先执行(HTML5 规定),但是不同浏览器有差异,所以还是要注意通过
src
下载的 JS 资源(GET 请求),不受浏览器 CORS 策略限制(JSONP 就是利用这个原理)放在哪?
过去,为了好看整齐,都统一放在
<head></head>
里面,但是 HTML 是从上而下加载的,如果 JS 内容很多,会阻塞 DOM 的解析,从而导致很长的白屏时间现在推荐放在
<body></body>
标签里面,</body>
之前,可以等 DOM 完全渲染之后再处理,提升用户体验HTML5 的
defer
属性,就可以放在在<head>
里面了defer
HTML5 规定含有
defer
的 script 标签需要按顺序执行,但是有些浏览器并没有遵守HTML5 规定含有
defer
的 script 需要在DOMContentLoaded
事件触发之前执行,但是有些浏览器没有遵守defer
会等到页面渲染完成之后执行脚本async
与
defer
不同,async
不保证脚本的执行顺序async
的脚本会在页面load
事件之前执行,但是不保证与DOMContentLoaded
事件触发的先后顺序动态引入
<noscript>
标签冷知识,如果浏览器不支持 JS(现在 应该没有这种浏览器了)或者禁用了 JS,则
<noscript></noscript>
内的内容就会渲染出来The text was updated successfully, but these errors were encountered: