2017-03-23 114 views
3

,所以我嘗試添加遞延script標籤這樣正確添加推遲屬性腳本標籤使用純JavaScript

const script = document.createElement('script'); 
    script.setAttribute('src', '/script.js'); 
    script.setAttribute('type', 'text/javascript'); 
    script.setAttribute('defer', true);//this is the code in question! 
    document.getElementsByTagName('body')[0].appendChild(script); 

但我發現結果腳本標籤將產生defer屬性像defer=true,而不是僅僅defer

他們是否一樣?如果我做的是defer=true而不是defer,意味着什麼?

謝謝!至少或 -

script.setAttribute("defer", "defer"); 

他們通常行爲相同(儘管文檔技術狀態的屬性,如延遲不應該是「真」假「的值):

回答

3

我將其更改爲在任何瀏覽器我在使用布爾屬性,該屬性defer通常實施採取script標籤(如果存在)效果,它的值被忽略。

話雖這麼說,該規範規定了一個布爾屬性的值守ld不存在,否則應該設置爲它自己,沒有前導/尾隨空白(大小寫無關緊要)。因此,動態設置時最好將該值作爲屬性的名稱。

請參閱本文檔布爾屬性(HTML5):https://www.w3.org/TR/html5/infrastructure.html#boolean-attribute

報價從DOC:

一些屬性是布爾屬性。元素上布爾屬性的存在表示真值,並且缺少屬性表示假值。

如果該屬性存在,則其值必須是空字符串 或值爲該屬性的 規範名稱的ASCII不區分大小寫的匹配項,且不包含前導或尾隨空白。

注:布爾值屬性不允許使用值「true」和「false」。 要表示一個錯誤的值,該屬性必須完全省略 。

而這個文檔defer屬性(HTML5): https://www.w3.org/TR/html5/scripting-1.html#attr-script-defer

它指出:

異步和推遲的屬性表示如何布爾屬性>腳本應該是執行。

相關問題