2017-08-29 37 views
2

我不清楚爲什麼nomodule屬性存在於支持ES6模塊的新瀏覽器中。如果默認爲text/javascript,腳本元素的HTML「nomodule」屬性的用途是什麼?

在HTML 5,type屬性是可選的,defaults to text/javascript

類型屬性給出的數據的腳本或格式的語言。如果該屬性存在,則其值必須是有效的MIME類型。不得指定charset參數。如果該屬性不存在,則使用默認值「text/javascript」。

它不會默認爲<script type="module" src="module.js"></script>。此默認值是否更改?如果沒有,爲什麼nomodule是必要的?我可以只使用<script src="bundle.js"></script>而不使用nomodule

回答

8

purpose of the nomodule attribute是使支持module scripts,忽略特定script元件新的瀏覽器:

nomodule屬性是一個布爾屬性,該屬性阻止腳本在支持模塊的腳本的用戶代理正在執行。

該規範has a good example

這個例子展示瞭如何將現代用戶代理模塊的腳本,併爲老年用戶代理的經典腳本:

<script type="module" src="app.js"></script> 
<script nomodule src="classic-app-bundle.js"></script> 

在支持模塊腳本的現代用戶代理中,具有nomodule屬性的script元素將b e將被忽略,並且script元素的類型爲「module」將被提取並評估(作爲模塊腳本)。相反,較舊的用戶代理將忽略script元素,其類型爲「module」,因爲這是他們的未知腳本類型 - 但它們在獲取和評估其他script元素(作爲經典腳本)時沒有問題,因爲它們不要實現nomodule屬性。

所以這就是它的工作原理。

在HTML 5中,type屬性是可選的,默認爲text/javascript ...有沒有這個默認改變了嗎?

默認沒有改變 - 它仍然是text/javascript。但type屬性現在也可以具有值module,這意味着瀏覽器仍然會解析並將其作爲text/javascript執行 - 但也可以具體爲module script

如果不是,爲什麼nomodule有必要?

爲了防止支持模塊腳本的新瀏覽器執行只適用於不支持模塊腳本的舊瀏覽器的腳本,這是必要的,如上例所示。

我可以只使用<script src="bundle.js"></script>而不使用nomodule嗎?

是 - 如果bundle.js不使用模塊。如果它使用模塊,則需要在其上放置type=module(在這種情況下,舊的瀏覽器將忽略它,因爲它們不識別typemodule值)。

相關問題