鍍金池/ 問(wèn)答/HTML/ 請(qǐng)問(wèn)什么情況下script tag的位置可以是在HTML的head tag里面?

請(qǐng)問(wèn)什么情況下script tag的位置可以是在HTML的head tag里面?

最近在學(xué)習(xí)前端。遇到一個(gè)常見(jiàn)的問(wèn)題,就是在script tag在HTML中的位置應(yīng)該放哪。

有一個(gè)例子, HTML markups是這樣的

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src='js.js'>
    </script>
  </head>
  <body>
  </body>
</html>

JS file是這樣的

var loadTime = document.createElement('div');
loadTime.textContent = 'You loaded this page on: ' + new Date();
loadTime.style.color = 'blue';
document.body.appendChild(loadTime);

我一開(kāi)始認(rèn)為這個(gè)JS里面沒(méi)有依賴任何目前HTML里的DOM元素,所以我放在HTML的任何位置效果都是一樣的。但是運(yùn)行之后發(fā)現(xiàn),放在head里面是不行的,還得放在body closing tag之前。

這讓我產(chǎn)生了一個(gè)疑問(wèn),如果這樣的script都不能放在head里面的話,那什么樣的script才能放在head里面?

另外我知道現(xiàn)在script tag有兩個(gè)attribute async?and?defer 可以讓瀏覽器在渲染HTML的時(shí)候,遇到了script不阻塞。而且http://caniuse.com/#feat=scri... 上面說(shuō)也有94.59%的瀏覽器現(xiàn)在支持這個(gè)attr。但是我在網(wǎng)上看了一圈,從來(lái)沒(méi)有看到有哪個(gè)網(wǎng)站用過(guò)這個(gè)attr。

回答
編輯回答
愿如初
但是運(yùn)行之后發(fā)現(xiàn),放在head里面是不行的

我測(cè)試了,是可以了,但js代碼必須放到.js文件中,而不能直接放到head里。

但是我在網(wǎng)上看了一圈,從來(lái)沒(méi)有看到有哪個(gè)網(wǎng)站用過(guò)這個(gè)attr

看一個(gè)瀏覽器兼容性就知道了,IE11以下都不支持,加上使用這個(gè)屬性也沒(méi)有很大的必要,把js放到最后不就行了,為什么一定要放到head中呢?

2018年9月18日 05:21
編輯回答
孤影
我一開(kāi)始認(rèn)為這個(gè)JS里面沒(méi)有依賴任何目前HTML里的DOM元素

這句話不成立。

document.body.appendChild(loadTime);這里依賴body。

輸出一下head里的document.body,你會(huì)得到null

2018年1月18日 09:21
編輯回答
凹凸曼

js可以放到文檔的任何位置,這和文檔結(jié)構(gòu)本身并沒(méi)有任何關(guān)系,不信你就放歌alert彈出來(lái)某個(gè)數(shù)字 ,就可以驗(yàn)證!

2017年6月16日 17:27
編輯回答
哎呦喂

如果你的js里面有一些dom操作的話就要放到下面 正常為了不影響html的頁(yè)面渲染速度 都是放在下面的

2017年5月6日 23:06