2017-03-23 49 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

它指出:

异步和推迟的属性表示如何布尔属性>脚本应该是执行。

相关问题