【问题标题】:Why is my JavaScript causing HTML Validation errors?为什么我的 JavaScript 会导致 HTML 验证错误?
【发布时间】:2012-08-17 04:49:18
【问题描述】:

所以,我基本上得到了这个页面,当我通过 W3C Validator 运行它时,它没有进行验证。有谁知道为什么?

http://jsfiddle.net/BcrW9/1/

谢谢!

【问题讨论】:

  • JavaScript 不会使您的验证失败,因为它实际上并没有修改您的 HTML,只是修改了 DOM。问题一定出在其他地方...
  • 验证器没有告诉你失败的地方吗?
  • 这很奇怪......我可以重现这种行为。
  • @elclanrs - Javascript 不会使验证失败,因为验证器不运行 Javascript。然而,在浏览器中,JS 可以修改被解析的 HTML。这就是document.write 所做的。

标签: javascript html validation w3c


【解决方案1】:

这是您的 jquery 包含。 可能是某种编码问题。从另一个站点复制代码(如脚本块)时偶尔会发生这种情况。我认为 OSX 保留了原始编码,而 Windows 将剪贴板文本转换为某种标准编码。无论如何,这行得通。我只是复制了第二个脚本标签,粘贴了它,更改了 src 值,然后删除了你从其他地方复制的那个。 http://jsfiddle.net/BcrW9/2/

PS -- 请在评论中确认或拒绝您使用 OSX。这在 OSX 中一直发生在我身上。在 Windows 中从未遇到过此问题。

【讨论】:

  • 可能是 BOM 编码问题。我在瑞士工作,我们遇到了 utf-8 和其他字符集所有可能和不可能的问题。大多数浏览器(和编辑器!!)都非常宽容,可以处理许多最终用户看不到的极端情况,并且只有验证器才能发现 - 但这并不意味着这是一件好事。
  • 那么您对我该如何解决这个问题有什么想法吗?
【解决方案2】:

真的只是扩展了 MicronXD 的答案。紧跟 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"> 文本但在换行符之前的字符是 U+200C ZERO WIDTH NON-JOINER。 (我需要一个十六进制编辑器才能看到这个)。

对于 HTML5 解析器,这是一个普通的文本字符,所以它假定 head 元素已经完成并且 body 元素已经开始(记住结束头和开始正文标签都是可选的)所以它推断这些标签,创建 body 元素并将流浪字符添加到其中。

然后验证器解析器看到结束头标记和开始正文标记并将它们报告为错误,因为解析器已经处于“In body”状态。

要摆脱杂散字符,只需选择并删除两个脚本行之间的字符,包括第一个脚本行末尾的>和第二个脚本行开头的<,然后重新键入您需要的字符。

【讨论】:

  • 能否详细说明两行脚本之间的字符?我没有看到它们之间的任何内容,还是您在谈论实际的脚本?
  • 抱歉,我对此有点陌生,我正试图弄脏我的手。 :)
  • 您不会看到该字符,因为它没有宽度和字形。只要相信它就在那里,并使用我描述的字符序列的块选择和删除来确保您将其删除。如果你愿意,你可以使用十六进制编辑器直接删除它——我使用“Hex Editor Neo”,它是免费的——但这需要更多的工作。
  • 啊,哈哈。谢谢你。 :) 我会选择 Hex Editor Neo。你是对的,鬼鬼祟祟的小家伙。这是一个很好的教训。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多