为什么浏览器不严格关于HTML?

时间:2014-08-29 00:33:33

标签: html html5 dom xhtml xhtml-1.0-strict

一个众所周知的事实是,浏览器会接受无效的HTML并尽力尝试理解它。如果您创建的网页仅包含以下代码:

<html>
    <head>
        <title>This is bad HTML</title>
    <body>
        <h1>Bad HTML</h2>
        <p>This is a paragraph
    </body>

然后你会得到一个网页解析方式,显示一个可接受的视图。是否你的意思取决于每个浏览器对你的错误的理解。

对我来说,就像Javascript可以像这样编写一样:

if (some_var == 1) {
    say_something("some text');
else {
    do_something_else();
// END OF CODE

其中,一个Javascript编译器用从无效代码中弄清楚可以合理地解析就像你的意思 - 或者说它自己有意义但是在运行之后运行它所有

我已经看过几篇关于问题的文章和问题&#34;它是否值得写出有效的HTML?&#34; ,它提出了一些关于利弊的意见写有效 HTML。然而,这真让我怀疑的是:

为什么浏览器首先接受无效的 HTML?

注意:以下问题不是更多问题,而是一种为我在此问的唯一问题提供背景的方法:

  • 为什么浏览器不严格?

  • 为什么他们不会因为错误无效代码而拒绝,就像其他任何编程语言一样? (并不是说我将HTML称为编程语言,但你明白了这一点)

  • 不会迫使所有开发人员编写HTML代码,而这些代码在任何浏览器中的解释都完全相同吗?

  • 如果浏览器拒绝解析无效标记,那么在任何地方以及想要在网络上发布内容的人都不会有效地产生有效标记吗?

  • 如果这是出于历史原因和向后兼容性,那么当我们已经看到像adsense.google.com这样的网站拒绝与IE兼容时,我们还没有时间进行更改。 V10

编辑:投票结束此问题的人请重新考虑。这不是广泛的问题也不是基于意见的。这是一个关于非常具体的主题的非常具体的问题,与编程世界完全相关,并且实际上可以通过真正了解它的人的真实答案来回答。感谢。

3 个答案:

答案 0 :(得分:5)

我不知道为什么他们从一开始就允许它,但这就是为什么他们 cant 现在切换:传统支持。如果一个浏览器强制严格的HTML,互联网的大部分将会破坏,是的,有些人会更新他们的代码,但有些页面会丢失。浏览器没有动力这样做,因为对于消费者而言,浏览器似乎不能在某些页面上工作,而是会切换到仍支持不太理想的html的另一个页面。

基本上因为它从一开始就被允许,现在必须允许它。

答案 1 :(得分:4)

“为什么浏览器首先接受无效的HTML?”

出于兼容性原因,以及较新的浏览器,因为HTML5规定了一种解析甚至无效文档的算法。

早期的HTML规范在很多情况下都很模糊, 例如,当看到错误的标签时发生的事情,或者嵌套的不一致 标签,例如<b><i></b></i>。即便如此,许多文档“只是工作”,因为一些早期的浏览器会忽略意外标记甚至“纠正”不正确的嵌套。

但现在HTML5规范包含用于解析HTML文档的much less ambiguous algorithm。请注意,该算法包括可能发生“解析错误”的点。但是这些解析错误通常不会阻止现代浏览器显示HTML文档,尽管浏览器可以自由地在其开发人员工具中显示解析错误,如果它选择:

  

[U] ser代理,在解析HTML文档时,可能在遇到的第一个解析错误时中止解析器,因为他们不希望应用本规范中描述的规则。 [重点补充。]

但同样,据我所知,没有现代浏览器会因为解析错误而中止解析文档(除非出现特殊情况,例如内存不足)。

关于adsense.google.com的情况:这可能与无效的HTML无关,但可能是因为IE9和早期的DOM支持不足以满足adsense.google.com的需求。

答案 2 :(得分:1)

为避免基于意见的答案,此类问题需要基于authorative reference with credible and/or official sources的答案。

以下摘录是来自W3C Validator Help & FAQ的引文,其中涉及Why are browsers accepting invalid HTML in the first place?以及与此相关的其他一些问题。


About Markup

  

万维网上的大多数页面都是用计算机语言编写的   (例如HTML)允许Web作者构造文本,添加   多媒体内容,并指定结果的外观或样式   应该有。

     

对于每种语言,这些都有自己的语法,词汇和语言   语法,以及用这些计算机语言编写的每个文档   应该遵循这些规则。 (X)HTML语言,适用于所有人   版本高达XHTML 1.1,使用称为机器可读的语法   DTD,一种从SGML继承的机制。

     

然而,正如自然语言中的文本可以包括拼写或   语法错误,使用标记语言的文档可能(针对各种文档)   原因)不遵守这些规则。

     

[...]


Concepts

  

计算机编程的一个重要格言是:&#34; Be   你生产的东西保守;你接受的东西要自由。&#34;

     

浏览器通过接受网页来遵循此格言的后半部分   并试图显示它们,即使它们不是合法的HTML。平时   这意味着浏览器将尝试做出有根据的猜测   你可能是什么意思。问题是不同的浏览器(或   即使是同一浏览器的不同版本也会有所不同   猜测同一个非法建筑;更糟糕的是,如果您的HTML是   真的是病态的,浏览器可能会变得无可救药地混淆了   产生混乱,甚至崩溃。

     

这就是为什么你想通过制作来遵循格言的前半部分   确保您的网页是合法的HTML。

     

[...]


Validity might not mean quality, and invalidity might not mean poor quality

  

有效的网页不一定是好的网页,但无效   网页几乎没有机会成为一个好的网页。

     

因此,W3C标记验证器说明了这一点   页面传递验证并不意味着W3C评估它是一个   好页面。它只意味着一个工具(不一定没有缺陷)   找到了符合特定规则的页面。没有,没有   减。这也是&#34;有效......&#34;图标永远不应该是   被认为是&#34; W3C质量标志&#34;。


Unexpected browser behavior might mean that they actually don't accept invalid markup

  

虽然当代Web浏览器在解析方面做得越来越好   即使是最糟糕的HTML“标签汤”,也不会总是发现一些错误   优雅。通常,不同平台上的不同软件会   不能以类似的方式处理错误,这使得它非常困难   一致地应用样式或布局。

     

另一方面,使用标准的,可互操作的标记和样式表   手,提供了处理页面的更大机会   一致地跨平台和用户代理。

     

[...]


Compatibility problems

  

在几个当代浏览器中检查页面“显示正常”   可能是一个合理的保险,页面将在今天“工作”,但它   并不保证明天会有效。

     

过去,很多作者都依赖于Netscape 1.1的怪癖   突然发现他们的网页在Netscape 2.0中显得空白。   虽然Internet Explorer最初设置为与bug兼容   Netscape,它也在以后转向标准合规性   版本。

     

[...]


Relying too much on 3rd party tools

  

这个问题的答案是标记语言不过是数据   格式。所以一个网站看起来并不像什么!只需要   在浏览器显示的视觉外观上。

     

在实践中,不同的浏览器可以并且确实显示相同的页面   不同。这是故意的,并不意味着任何类型的浏览器   错误。有时用于此的术语是WYSINWOG - 你看到的不是   别人得到的东西(除非巧合)。它确实是其中之一   网络的主要优势,(例如)视障人士   用户可以在没有发布者的情况下选择非常大的打印或文本到语音转换   不得不去准备一个单独的麻烦和费用   版。