来自 W3C 验证程序的错误“元素脚本不得具有属性延迟,除非还指定了属性 src”
Error “Element script must not have attribute defer unless attribute src is also specified” from W3C validator
我有一个HTML文档,其源代码有一个具有defer
属性的script
元素。W3C 验证器说它无效,因为它缺少 src
属性,但实际上源代码中有一个src
属性:
<script defer type="text/javascript">if($(window).width()>1024){document.write("<"+"script src='js/jquery.preloader.js'></"+"script>");}</script>
我能做什么?
W3C HTML Checker(验证器)的维护者。
解决方法:将脚本内容放入单独的文件中,并使用 src
属性引用该脚本内容。
检查器会报告问题中代码段的错误,因为 HTML 规范用于明确声明script
不能具有 defer
属性,除非它也具有 src
属性。
规范不再明确说明该限制,但我认为这只是由后来的规范更改引起的无意回归(您的问题有助于抓住这一点 - 所以,谢谢!
因此,我将调查并提出规范修复的拉取请求,然后稍后更新此答案。
2018-05-05 更新
为了记录在这里,我最终确实提交了带有HTML规范补丁的拉取请求:
https://github.com/whatwg/html/pull/2509
。并合并到 HTML 规范源代码中:
https://github.com/whatwg/html/commit/3c5180a08f90a375c64f8191f32f8c7ddfec0ba3
。所以现在当前的HTML规范再次陈述了限制:
https://html.spec.whatwg.org/multipage/scripting.html#attr-script-defer
async
和defer
属性是指示应如何评估脚本的布尔属性。经典脚本可以指定defer
或async
,但除非存在src
属性,否则不得指定。
您有两个<script>
标签。
- 一个在 HTML 源代码中
- 一个是使用
document.write
生成的。
HTML看起来像这样:
<script defer type="text/javascript">…</script>
它没有src
属性。这就是您收到错误的原因。您不能在那里有defer
属性。
JavaScript 生成的那个看起来像这样:
if ($(window).width()>1024){
document.write("<"+"script src='js/jquery.preloader.js'></"+"script>");
}
它具有src
属性,没有defer
属性。您可以在此处添加defer
属性。
它也是JavaScript,所以无论如何都不会被验证器视为HTML。
尝试将 DOCTYPE 设置为 HTML5。如果不可行,您可能需要编写defer=true
而不是defer
。
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- javascript函数属性设置器中的延迟
- 延迟加载引导传送带而不更改 img src 属性
- CSS3 转换 - 如何延迟 z 索引属性的重置
- 延迟控制器执行,直到分配了 rootScope 属性的值
- 为什么这个 Twitter 库会延迟其对象属性的分配
- 延迟属性和加载事件
- jQuery延迟链接css属性
- 是将数据作为属性附加到延迟对象,还是将数据与延迟对象一起发送到执行解析的函数
- jQuery.css():属性中是否存在固有延迟's对元素的应用程序
- 我如何使用脚本延迟属性的ASP MVC 4捆绑脚本
- 如何在Ember.js中延迟计算属性来重新计算它们自己
- jQuery设置css属性延迟淡出
- 在每次迭代中延迟迭代对象属性
- 不能设置属性'innerHTML'的空值,而仍然使用窗口.加载延迟
- 来自 W3C 验证程序的错误“元素脚本不得具有属性延迟,除非还指定了属性 src”