我有一个 HTML 文档,其源具有一个具有属性的script
元素。defer
W3C 验证器说它无效,因为它缺少src
属性,但实际上src
源中有一个属性:
<script defer type="text/javascript">if($(window).width()>1024){document.write("<"+"script src='js/jquery.preloader.js'></"+"script>");}</script>
我能做些什么?
我有一个 HTML 文档,其源具有一个具有属性的script
元素。defer
W3C 验证器说它无效,因为它缺少src
属性,但实际上src
源中有一个属性:
<script defer type="text/javascript">if($(window).width()>1024){document.write("<"+"script src='js/jquery.preloader.js'></"+"script>");}</script>
我能做些什么?
W3C HTML 检查器(验证器)的维护者在这里。
修复:将脚本内容放入单独的文件中,并使用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
or ,但除非该属性存在async
,否则不得指定其中之一。src
你有两个<script>
标签。
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
.