因此,我尝试添加一个延迟脚本标记,如下所示
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=true
的defer
属性,而不仅仅是defer
。
它们是一样的吗?如果我使用defer=true
而不是defer
,这意味着什么
谢谢!
发布于 2017-03-24 03:36:39
我会将其更改为:
script.setAttribute("defer", "defer");
它们的行为通常是一样的(尽管文档在技术上规定了一个属性的值不应该是"true“或”false") -或者至少在我使用过布尔属性的任何浏览器中都是如此。属性defer
通常被实现为在脚本标签中出现时生效。它的值被忽略。
作为,规范规定布尔属性的值不应该存在,否则应该设置为自身,没有前导/尾随空格(大小写无关紧要)。因此,在动态设置属性时,最好将该值保留为属性的名称。
有关布尔属性(HTML5)的信息,请参阅以下文档:https://www.w3.org/TR/html5/infrastructure.html#boolean-attribute
引用自该文档:
许多属性都是布尔属性。元素上存在布尔属性表示真值,不存在该属性表示假值。
如果该属性存在,则其值必须是空字符串,或者是与属性规范名称不区分大小写的ASCII匹配的值,并且没有前导空格或尾随空格。
注意:布尔属性不允许值"true“和"false”。要表示false值,必须完全省略该属性。
defer属性的文档(HTML5):https://www.w3.org/TR/html5/scripting-1.html#attr-script-defer
它写道:
异步和延迟属性是布尔型属性,用于指示应如何执行脚本。
更新:看起来,如果你将一个属性设置为空字符串,它将添加没有值的属性。这也是一种选择。
发布于 2021-10-21 16:44:33
这对我很有效:(chrome 94)
script.defer = true;
https://stackoverflow.com/questions/42985437
复制相似问题