HTML规范的哪一部分导致角括号内的URL被解析为带有属性的<http:>元素?

Lon*_*ner 1 html url standards html5 specifications

这是我的HTML代码.

<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head>
    <title>Bar</title>
    <script>
    window.onload = function() {
        console.log(document.body.innerHTML)
    }
    </script>
</head>
<body>
<http://www.example.com/foo/bar/baz.html>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我将此代码保存在一个名为的文件中bar.html,然后使用Firefox或Chrome打开该页面.这是我在控制台中看到的输出.

<http: www.example.com="" foo="" bar="" baz.html="">


</http:>
Run Code Online (Sandbox Code Playgroud)

现在我明白我的代码是不正确的,因为它有一个包含在<和中的URL >.

我想了解浏览器究竟是如何将其解析为一个http:标记,其中部分URL被解释为HTML属性.

HTML规范的某些部分是否会导致这种行为?如果是这样,你能引用HTML规范的这些部分吗?

Bol*_*ock 5

您需要知道的一切都在8.2.4节中.特别是:

  1. 最多<http:,解析器处于标记名称状态.元素的标记名称http:包括冒号,如</http:>结束标记所示.

  2. 第一个/将解析器切换到自闭合开始标记状态.

  3. 所述第二 /导致解析错误,如步骤2中的链接所描述的,分析器切换到前属性名称状态.

  4. 解析器进入属性名称状态并继续使用URL.这是导致路径路径被视为属性名称的原因.

  5. 当解析器到达下一个时/,它会切换回自闭合开始标记状态并重复步骤2和3,除了它不是第二个/而是一个不同的字符(不是>)导致解析错误并切换解析器返回步骤3中的before属性名称状态.

  6. 解析器最终看到a后>,它会关闭开始标记,发出标记并继续正常进行.