Firefox 4: HTML5 解析器 - 内联 SVG、速度提升及更多

这是一篇来自 Henri Sivonen 的客座文章,他一直在致力于 Firefox 的新 HTML5 解析器。HTML 解析器是浏览器中最复杂和最敏感的部分之一。它控制着 HTML 源代码如何转换为网页,因此对其进行更改非常罕见,并且需要进行充分的测试。虽然自 90 年代末 Gecko 首次问世以来,大部分代码都已重建,但解析器是“原始”代码中为数不多的几个例外。这将用一个新的解析器来替换旧的解析器,新的解析器速度更快,符合新的 HTML5 标准,并且还启用了许多新功能。

替换 Gecko 自 1998 年以来的旧 HTML 解析器的项目已经进行了一段时间了。该解析器现在默认在主分支上启用,因此您只需 下载一个 Nightly 版本 就可以尝试使用它,无需更改任何配置选项。

新的 HTML5 解析器带来了四个主要改进

  • 您现在可以在 HTML5 页面中内联使用 SVG 和 MathML,无需使用 XML 命名空间。
  • 解析现在是在 Firefox 的主 UI 线程之外完成的,从而提高了浏览器的整体响应能力。
  • 它将 innerHTML 调用的速度提高了约 20%。
  • 随着新解析器的发布,我们修复了 数十个长期存在的解析器相关错误

使用 Firefox Nightly 或其他支持 HTML5 的浏览器尝试演示。它应该看起来像这样

什么是 HTML5 解析器?

Gecko 中的 HTML5 解析器根据 HTML5 解析算法 将字节流转换为 DOM 树。

HTML5 是第一个详细说明实现者如何解析 HTML 的规范。在 HTML5 之前,HTML 规范并没有说明如何将字节流转换为 DOM 树。理论上,HTML5 之前的 HTML 应该根据 SGML 来定义。这意味着有效的 HTML 文档的源代码和 DOM 之间存在着某种关系。但是,对于无效文档(而 Web 内容通常不是有效的 HTML4)来说,解析并没有得到很好的定义,而且理论上是 HTML 的一部分但实际并未被主流浏览器实现的 SGML 结构也存在。

由于缺乏适当的规范,浏览器开发人员不得不自行填补空白,并在对如何获得兼容行为存在疑问时,对市场份额最大的浏览器(最初是 Mosaic,然后是 Netscape,再然后是 IE)进行逆向工程。这导致了许多不成文的通用规则,但也导致了浏览器之间的行为差异。

HTML5 解析算法标准化了浏览器和其他使用 HTML 的应用程序可以收敛的定义明确的行为。根据设计,HTML5 解析算法适合处理现有的 HTML 内容,因此应用程序无需继续维护旧的解析器以处理旧内容。具体来说,在主分支的 Nightly 版本中,HTML5 解析器用于所有 text/html 内容。

它有何不同?

HTML5 解析算法有两个主要部分:标记化和树构建。标记化是将源流拆分为标签、文本、注释和标签内属性的过程。树构建阶段接受标签以及交错的文本和注释,并构建 DOM 树。HTML5 解析算法的标记化部分更接近于 Internet Explorer 的做法,而不是 Gecko 以前的做法。Internet Explorer 在一段时间内拥有最大的市场份额,因此站点通常经过测试以确保在经过 IE 的标记器处理后不会出现故障。树构建部分与 WebKit 已经实现的功能非常接近。在 HTML5 出现之前,在所有主要浏览器引擎中,WebKit 拥有最合理的树构建解决方案。

此外,新的 HTML5 解析器在主线程之外解析网络流。传统上,浏览器大多数任务都在主线程上执行。与 Gecko 的旧 HTML 解析器相比,HTML5 解析器的代码库更加易于维护,使得像在主线程之外解析这样的重大更改成为可能。

这对 Web 开发人员有什么意义?

上面提到的更改主要对浏览器开发人员感兴趣。HTML5 解析器的一个关键特性是您不会注意到有任何变化。

但是,也存在一项面向 Web 开发人员的重要新功能:内联 MathML 和 SVG。HTML5 解析从 XML 中解放了 MathML 和 SVG,并使它们在 Web 的主要文件格式中可用。

这意味着您可以将排版精美的数学公式包含在 HTML 文档中,而无需将整个文档重铸为 XHTML,更重要的是,无需将为您的站点提供支持的软件改造为输出格式良好的 XHTML。例如,您现在可以在 HTML 中内联包含二次方程式的解


  x

  =
  
    
      
      b
      ±
      
        

          b
          2
        
        
        4
        
        a

        
        c
      
    
    
      2
      
      a

    
  

同样,您也可以将可缩放的内联艺术作为 SVG 包含在内,而无需将 HTML 重铸为 XHTML。随着屏幕尺寸和像素密度的变化,使图形在所有缩放级别上都清晰可见变得越来越重要。虽然以前可以通过引用(使用 object 元素)在 HTML 文档中使用 SVG 图形,但在某些情况下,内联放置 SVG 更加方便。例如,警告符号之类的图标现在可以内联包含,而不是从外部文件包含。


  
  

创建一个以 <!DOCTYPE html> 开头的页面,并将这两段代码放入其中,它应该可以在新的 Nightly 版本中运行。

一般来说,如果您有一段 MathML 或 SVG 代码,您只需将 XML 标记内联粘贴到 HTML 中(如果存在,省略 XML 声明和文档类型)。有两点需要注意:标记不得使用元素的命名空间前缀(即没有 svg:svgmath:math),并且 XLink 命名空间的命名空间前缀必须是 xlink

在上面的 MathML 和 SVG 代码片段中,您会看到上面的内联 MathML 和 SVG 代码比单纯将 XML 粘贴到 HTML 中更加 HTML 化,并且减少了冗余。没有命名空间声明,并且已省略属性值周围不必要的引号。引号省略有效,因为标签是由 HTML5 标记器处理的,而不是由 XML 标记器处理的。命名空间声明省略有效,因为 HTML5 树构建器不会使用看起来像命名空间声明的属性来为元素分配 MathML 属性或 SVG 属性。相反,<svg> 为分配到 DOM 中 SVG 命名空间的元素建立了一个范围,<math> 为分配到 DOM 中 MathML 命名空间的元素建立了一个范围。您还会注意到,MathML 示例使用了以前在 HTML 中不支持的命名字符引用。

以下是内联 MathML 和 SVG 解析的快速总结,供 Web 作者参考

  • <svg></svg> 被分配到 DOM 中的 SVG 命名空间。
  • <math></math> 被分配到 DOM 中的 MathML 命名空间。
  • foreignObjectannotation-xml(以及其他一些不那么重要的元素)建立了一个嵌套的 HTML 范围,因此您可以像预期的那样嵌套 SVG、MathML 和 HTML。
  • 解析器会对标记进行大小写校正,因此 <SVG VIEWBOX='0 0 10 10'> 在 HTML 源代码中有效。
  • DOM 方法和 CSS 选择器区分大小写,因此您需要使用规范的大小写来编写 DOM 调用和 CSS 选择器,对于 SVG 的各个部分(例如 viewBox)来说,规范的大小写是驼峰式。
  • 如果 foo 是 MathML 或 SVG 元素(即不是 HTML 元素),则语法 <foo/> 会立即打开并关闭 foo 元素。
  • 属性的标记化方式与在 HTML 中的标记化方式相同,因此您可以在与在 HTML 中相同的条件下省略引号(即,当属性值不是空字符串并且不包含空格、"'`<=> 时)。
  • 警告:由于重用了与旧版本兼容的 HTML 标记化,上述两个特性不能很好地结合使用。如果在最后一个属性值上省略引号,则必须在结束斜杠之前有一个空格。<circle fill=green /> 是有效的,但 <circle fill=red/> 无效。
  • xmlns 开头的属性对最终使用的命名空间元素或属性没有任何影响,因此您不需要使用以 xmlns 开头的属性。
  • XLink 命名空间中的属性必须使用前缀 xlink(例如 xlink:href)。
  • 元素名称中不得包含前缀或冒号。
  • SVG script 元素的内容的标记化方式与在 XML 中的标记化方式相同,而不是像 HTML script 元素的内容的标记化方式。
  • 当 SVG 或 MathML 元素打开时,<![CDATA[]]> 部分按在 XML 中的方式工作。您可以使用它将文本内容隐藏在不支持 text/html 中的 SVG 或 MathML 的旧浏览器中。
  • MathML 命名字符可在文档中的任何位置(包括 HTML 内容)使用命名字符引用。
  • 为了处理作者将部分 SVG 片段粘贴到 HTML 中(谁知道为什么)或将 <math> 标签用于非 MathML 目的的旧页面,尝试将各种常见的 HTML 元素作为 SVG 元素的子元素嵌套(没有 foreignObject)将立即退出 SVG 或 MathML 上下文。这可能会使一些错别字产生意想不到的效果。

66 条评论

  1. jpvincent

    那么,这个引擎只会出现在 FF4 中,还是会更早地在 3.6.x 版本中出现?

    2010 年 5 月 11 日 上午 09:23

    1. jng

      您可以在 3.6.x 版本中使用它,但您需要访问 about:config 并启用 HTML5 解析。

      2010 年 5 月 11 日 上午 10:35

  2. voidmind

    针对 Mozilla 2 的 XPCOMGC (https://wiki.mozilla.org/XPCOMGC) 的工作是否会包含在 FF4 中,还是在路线图中更靠后?

    2010 年 5 月 11 日 上午 10:00

    1. Christopher Blizzard

      我认为我们现在没有专注于 XPCOMGC。我们在之前的版本中已经完成了循环收集器,这在解决这些问题方面帮助很大。我们还在研究每页 GC,这将有助于解决一些垃圾回收问题。

      2010 年 5 月 17 日 上午 09:39

  3. Daniel

    无法在 Chrome 中渲染,但http://html5.validator.nuhttp://validator.w3.org/都说该页面是无效的 HTML5。

    2010 年 5 月 11 日 上午 10:37

  4. Doug Schepers

    很好的写法和很棒的工作,Henri。我提醒大家在 SVG 中仍然使用引号和正确的字母大小写,这样内容才能在其他情况下工作,比如 XHTML 中的内联 SVG、独立 SVG 等。

    这是一个巨大的进步……随着 Firefox 和 Internet Explorer 的下一个版本支持在 HTML 中内联 SVG,我希望看到更多使用。 (让我们希望 IE 也支持 MathML!)

    2010 年 5 月 11 日 上午 10:48

  5. Henri Sivonen

    @jpvincent,这个不太可能被移植回 3.6.x。

    @jng,在 Firefox 3.6.x 中翻转 pref 会使你面临已知的错误,包括崩溃。3.6 中解析器的快照来自 2009 年 6 月,当时解析器还没有经过我们 nightly 版本的用户社区的任何测试。如果你想运行 HTML5 解析器,我建议你获取 trunk nightly 而不是在 3.6.x 上启用它。

    @Daniel,Chrome 还没有 HTML5 解析器。我还没有在 HTML5 验证器中启用 SVG-in-text/html 或 MathML-in-text/html 验证的原因是我想阻止作者在拥有浏览器进行测试之前使用这些功能。如果作者推测性地创建内容,则存在创建遗产的风险,这使得引入实现变得更加困难。我打算很快启用 SVG-in-text/html 和 MathML-in-text/html 验证。

    2010 年 5 月 11 日 上午 10:50

    1. SilverWave

      >@jpvincent,这个不太可能被移植回 3.6.x。

      为什么不回滚?
      3.6.7 或者其他版本,就像 OOPP 一样?
      同样的理由也适用,没有 GUI 更改,只是幕后的东西。

      能够在 3.6 中使用最新的解析器会很好。

      4.0 还要一段时间,能立即获得这些收益会很好 ;-)

      2010 年 5 月 18 日 上午 09:42

      1. Boris

        SilverWave,与 OOPP 不同,这个更改已知会破坏各种网站,因为解析器 _确实_ 会更改行为,并且网站会假设关于解析器行为的一些东西(包括 UA 嗅探等)。这些网站最终会更新,但在那之前,这对于稳定分支来说是不合适的。

        2010 年 5 月 18 日 上午 09:59

        1. SilverWave

          说得有道理。虽然我更多地考虑的是用新的解析器替换旧的(有 Bug 的)3.6 解析器,但默认情况下 html5 仍然处于关闭状态。

          然后人们可以像现在一样,自行承担风险地打开它。

          我想对于微小的收益来说,成本太高了。
          我以为来自更多用户的反馈将是有益的,并为网站提供一个推动,让他们开始进行必要的升级。

          顺便说一句,我已经在一周前在 3.6 中启用了 html5,到目前为止还没有问题 ;-)

          2010 年 5 月 18 日 上午 10:36

  6. Lars Gunther

    真的很酷。演示在 Fennec 中运行得完美无缺。我现在正在上面写这条评论。 (最新的更新让填写这个表格成为一种乐趣。)

    2010 年 5 月 11 日 上午 11:20

  7. Brian Herman

    哇,这太酷了。这在 nightly 版本中像梦一样运行。

    2010 年 5 月 11 日 下午 13:34

  8. ALan

    我喜欢它。感觉真的很快。

    2010 年 5 月 11 日 下午 14:09

  9. pascal

    不错。它最终会允许基本的东西,比如空脚本和 textarea 元素吗? (不需要单独的结束标签,就像 XML 一样)

    哦,当内容类型是 XML 时,Firefox 最终会使用一个真正的 XML 解析器吗?而不是某个标签汤猜解析器?

    2010 年 5 月 11 日 下午 14:34

  10. Jeff Walden

    原文中两个“lead”都应该是“led”。

    2010 年 5 月 11 日 下午 14:41

  11. Adam

    这个 html5 解析器也用于解析 xhtml(5),还是使用单独的解析器来解析所有 xml?

    2010 年 5 月 11 日 下午 15:25

  12. Hans Wurest

    @Doug Schepers
    我同意,仅仅因为它是可能的,人们仍然应该被阻止不保留。

    我想知道在 3.6 中包含 HTML5 解析器的理由是什么?

    另外,我记得 Firefox 在渲染超大型表格方面一直很有效率(与其他浏览器相比)。我希望这不会随着新解析器的使用而变得更糟。

    2010 年 5 月 11 日 下午 17:12

  13. SilverWave

    在我的测试用例中,Firefox 3.6.5 在 html5.enable=True 时快了大约 3 倍

    Bug 559396 大型 ShelveLogger 文件在 Firefox 中速度很慢

    bzip2 压缩的带仪表版本的版本,它会提醒时间并具有探查器钩子

    Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.5pre) Gecko/20100507 Ubuntu/10.04 (lucid) Namoroka/3.6.5pre – Build ID: 20100507040151

    @Hans Wures
    关于:渲染超大型表格
    FF 3.6.4 是 37 秒,Chromium 是 5 秒,所以不是那么快。

    2010 年 5 月 11 日 下午 20:40

  14. voracity

    “[svg] 建立了一个元素范围,这些元素在 DOM 中被分配给 SVG 命名空间,而 [math] 建立了一个元素范围,这些元素在 DOM 中被分配给 MathML 命名空间。”

    你的意思是标记被用来实际标记东西? (对于 XML 等的冗长性表示歉意,但它实在令人伤心。)

    2010 年 5 月 12 日 上午 01:04

  15. pawel

    是否有计划像 Webkit 和 Opera 一样通过 CSS 提供 SVG?

    2010 年 5 月 12 日 上午 02:59

  16. Henri Sivonen

    @Daniel,我更新了 Validator.nu:http://html5.validator.nu/?doc=http%3A%2F%2Fhsivonen.iki.fi%2Ftest%2Fmoz%2Fhtml5-hacks-demo.html&showsource=yes W3C 实例的验证器应该在 W3C 实例的维护者从版本控制中更新代码时接收到更改。

    @Hans Wurest,代码会在 trunk 上进行落地,并且会定期剪切发布分支。Firefox 3.6 在解析器落地到 trunk 并关闭 pref 之后很快就进行了分支,因此解析器被选入了分支。分支的更改策略相当严格,所以在那时,解析器被卡在了分支上,因为删除解析器没有达到分支独有更改的标准。

    2010 年 5 月 12 日 上午 06:23

  17. A. Davis

    我经常使用 xhtml+mathml+svg (非常适合制作物理工作表),并且一直在更新内容以使用 html5 解析器 (使用 Firefox 3.6)。它很棒,而且运行良好。期待 Firefox 4。

    我注意到 html5 解析器发生了一件事,那就是 onload 属性似乎不再起作用。这是设计使然还是应该提交一个 Bug?

    2010 年 5 月 12 日 上午 06:49

  18. A. Davis

    Oops,“svg 元素中的 onload 属性”

    2010 年 5 月 12 日 上午 06:51

  19. Henri Sivonen

    如果你想知道‘a’ 和‘font’ 结束标签在 SVG 中的行为,这是一个已知的规范错误,目前仍在实现中。规范错误的修复本身是有错误的,因此修复的实现现在被新的规范错误阻止。跟踪为 https://bugzilla.mozilla.org/show_bug.cgi?id=552908

    2010 年 5 月 12 日 上午 07:13

  20. Lars Gunther

    Doug 关于 SVG 可被复制到另一个环境中并被解析为 XML 的警告,对于验证器的教学规则集来说将是一个很好的补充 (尚未实施)。

    2010 年 5 月 12 日 上午 08:36

  21. Lars Gunther

    第二个后续想法:是否可以将 SVG 和/或 MathML 在 text/html 中作为 Modernizr 的插件进行检查?

    2010 年 5 月 12 日 上午 08:39

  22. Henri Sivonen

    @Lars Gunther,我不确定配置文件发生了什么。好长时间没有消息了。

    至于 Modernizr,我建议使用类似 http://software.hixie.ch/utilities/js/live-dom-viewer/saved/481 的方法来实现 SVG。在 MathML 的情况下,很难判断浏览器只是实现了解析算法,还是实现了解析算法以及在生成的 DOM 之上的实际 MathML 功能。

    2010 年 5 月 12 日 上午 10:39

  23. Lars Gunther

    你的工作已经在 https://caniuse.cn/ 的“HTML5 中的内联 SVG”标题下被注意到。速度真快!

    2010 年 5 月 12 日 下午 13:08

  24. marcoos

    很棒的文章,还有即将在 Firefox 4 中发布的强大功能。我迫不及待地想尝试一下。 :)

    与一些最有趣的 (至少对我来说) Hacks 文章一样,这是我对 Henri 文章的 波兰语翻译

    2010 年 5 月 12 日 下午 13:11

  25. Brad Neuberg

    看到这项工作默认情况下出现在 Firefox nightly 版本中真是令人兴奋!Henri,你做得很棒。

    这将使 IE 9 和 Firefox 4+ 成为两个原生支持 HTML5 中 SVG 的浏览器。有人知道 Webkit 对此功能的现状吗?

    最好的祝愿,
    Brad Neuberg

    2010 年 5 月 12 日 下午 17:08

  26. Brad Neuberg

    顺便说一句,鲜为人知的是,你可以将 CSS 网页字体应用于 SVG 文本元素。你能确保在新的 HTML5/SVG 解析器中测试它仍然有效吗?

    2010 年 5 月 12 日 下午 5:10

  27. mike503

    所有这些都很棒,但请改进资源利用率。Firefox 通常是最可靠的网站兼容性浏览器,但它会像其他浏览器一样吞噬 RAM,有时还会吞噬 CPU。

    更快的启动时间和更小的占用空间将非常棒。作为一款开源产品,我认为人们会不断地进行改进!

    2010 年 5 月 13 日 下午 12:19

    1. Boris

      mike503,有趣的是,每当有人实际测量不同浏览器的内存使用情况时,Firefox 的 RAM 使用量总是最低。所以我不明白你说的“像其他浏览器一样吞噬 RAM”是什么意思。

      2010 年 5 月 14 日 上午 12:14

    2. SilverWave

      Re: mike503

      Chromium 使用 778MB(2 个标签),Firefox 3.6.5 使用 272MB(43 个标签)。
      我还运行了 34 个扩展程序,它没有崩溃。

      我在大多数评论部分都看到了“mike503”这样的东西。

      要么是垃圾邮件,要么是网络水军,要么他真的有问题 :-)
      ___
      所以……
      你是否使用 FF3.6?如果没有,请升级。
      你是否创建了一个干净的配置文件?如果没有,请创建。

      如果以上方法有效,请逐个添加扩展程序,直到找到导致问题的那一个。

      如果以上方法无效,则可能是你的操作系统问题。尝试启动最新的 Ubuntu LiveCD,看看使用提供的 Firefox 是否正常工作。

      如果不行,那就是硬件问题 :-(
      ___

      老实说,我不在乎 Chromium 使用更多的内存,因为我已经升级到 8GB 了,就是为了追求速度!

      如果 Firefox 速度更快,我宁愿它使用 2GB 内存。

      顺便说一下,这不是问题,因为我已经将 Firefox 加载到内存中,但速度并没有变化。

      2010 年 5 月 14 日 上午 2:58

  28. Henri Sivonen

    @pascal,不,由于与遗留的兼容性,textarea 和 script 将继续在 text/html 中需要结束标签。Firefox 已经使用真实的 XML 解析器解析 XML 内容类型,并且已经使用了几年了。

    @Adam,HTML5 解析器用于作为 text/html 提供的内容。作为 application/xhtml+xml 提供的内容将使用 XML 解析器解析。所以,HTML5 解析器不用于 XHTML5。(如果你将内容作为 text/html 提供,它就不是 XHTML5。)

    @A. Davis,该错误是 https://bugzilla.mozilla.org/show_bug.cgi?id=552938 。SVG 规范中定义的 load 事件并未令人满意地考虑所有后果。我一直等到 SVG 工作组决定是改进定义还是删除整个事件。(这个事件本身就是一个缺陷。)

    @Brad Neuberg,谢谢。我不是预测 WebKit 中事物状态的最佳人选,但目前情况是 WebKit 在其 HTML 解析器中不支持 text/html 中的 SVG 或 MathML。在 Gecko 中,@font-face 在 text/html 中的 SVG 中有效:http://hsivonen.iki.fi/test/moz/font-face-svg-in-html.html

    2010 年 5 月 14 日 上午 1:37

  29. Michael Newton

    如果你的功能可以通过两种相同的方式实现,但其中一种方式需要以粗体字显示警告,那是不是不提更好呢?

    我说的是未加引号的属性……

    2010 年 5 月 14 日 下午 3:09

  30. Darren Govoni

    最新的版本运行良好,但经过测试我的应用程序(例如动画、大型 JavaScript 应用程序等)后,JavaScript 的执行速度仍然不如 Chrome 流畅。

    我的应用程序需要 Firefox,我对它很忠诚。所以希望它发布后,JavaScript 和 CSS 的渲染速度能比 Chrome 快。

    2010 年 5 月 15 日 下午 11:40

  31. […] Mozilla 的 Firefox 开发人员之一 Sivonen 在 hacks.mozilla.org 上写了一篇关于 Firefox 的新 HTML5 的客座文章 […]

    2010 年 5 月 16 日 下午 6:12

  32. Boris

    Darren,你是否针对你的应用程序的性能问题提交了 bug?如果没有,请这样做,并在其中 cc “:bz”。

    2010 年 5 月 17 日 下午 3:20

  33. Darren Govoni

    我会的!谢谢。

    2010 年 5 月 17 日 下午 7:42

  34. david

    很高兴听到 HTML 解析器正在重建!Firefox 3.7 Alpha 4 中的 HTML5 解析器(或多或少)是否正常,还是我必须安装 nightly 版本?

    2010 年 5 月 18 日 下午 12:06

  35. Henri Sivonen

    @Michael Newton,我提到它主要是为了明确表示没有用于 SVG 和 MathML 的嵌入式 XML 解析器。

    @david,我不记得 Alpha 版本中 HTML5 解析器处于哪个阶段,但它“或多或少”是正常的,但需要翻转首选项。我仍然建议那些想提前查看 HTML5 解析器的人使用最新的 nightly 版本,而不是旧版本(一般情况下,nightly 版本会有一些注意事项)。

    2010 年 5 月 18 日 下午 11:27

  36. […] 以及 canvas(Safari 和 Firefox 已经发布了多年)它实际上是互操作性的真正承诺。即使是老牌的微软,在过去将近十年里一直在尽力阻碍网络发展,[…]

    2010 年 6 月 4 日 上午 11:48

  37. Steve

    请在未来的 Firefox 版本中将 NoScript 包含为浏览器的一部分。

    2010 年 6 月 5 日 下午 12:16

  38. Ant Gray

    无论如何,我更喜欢使用引号来表示值,因为我的文本编辑器只突出显示带引号的值。

    2010 年 6 月 16 日 下午 2:54

  39. […] Firefox 4 的新功能 […]

    2010 年 6 月 18 日 上午 4:34

  40. Guillermo Anaya

    如何删除此 Firefox 文档:3000-8022_4.10045910.html
    协议:超文本传输协议
    类型:Firefox 文档
    地址:http://download.cnet.com/Ad-Aware-Free-Anti-Malaware/3000-8022_4-10045910.html

    此文档是一个病毒,如何从我的计算机中删除它?

    2010 年 6 月 25 日 上午 2:18

  41. […] HTML5 解析器:运行当今和未来的最佳 Web 应用程序——如果用户的浏览器不支持 HTML5,他们仍然不会错过你的内容。[…]

    2010 年 7 月 6 日 下午 2:42

  42. […] HTML5 解析算法是浏览器供应商之间共同努力的结果,其中一个目标是,无论网站包含多少语法错误,它们在所有浏览器中的显示方式都应一致。[…]

    2010 年 7 月 6 日 下午 5:20

  43. […] HTML5 解析器是浏览器供应商共同努力的结果,其中一个目标是,无论网站包含多少语法错误,它们在所有浏览器中的显示方式都应一致。[…]

    2010 年 8 月 12 日 上午 6:23

  44. […] 原作者:Christoper Blizzard – 返回原文 […]

    2010 年 8 月 12 日 下午 5:32

  45. […] 请注意,由于我们新的 HTML5 解析器,我们甚至不需要使用 XHTML 就可以嵌入 SVG。[…]

    2010 年 8 月 24 日 下午 1:49

  46. Tim Niiler

    我注意到,使用 嵌入的 svg 对象会显示在 html 文档中,但是当加载到 FF4b4 中时,其后的所有内容(html 或其他内容)都不会显示。相同的文档在 FF 3.6.8 上可以正常工作。我是不是漏掉了什么,还是这是个 bug?

    2010 年 9 月 7 日 下午 3:25

  47. matt

    在这个阶段,我不明白为什么还有人使用笨重的旧 Firefox。
    当然,当我们的选择更有限时,它是一个可行的选择;但有了我们今天拥有的浏览器,Firefox 就和 Internet Explorer 一样过时了。

    2010 年 9 月 7 日 下午 5:45

    1. voidmind

      史诗级巨魔

      2010 年 9 月 7 日 下午 6:18

  48. Zach Hauri

    我忍不住觉得这很有趣

    “/ ! 警告:请记住,&PlusMinus; 表示有两个解!”

    就像,我的天,如果你忘记了 +/- 表示两种不同的解,那么世界将会终结,撒旦将从地狱中升起。警告 警告 警告!小心!注意!

    但是,现在回到正题:HTML5 太棒了。

    2010 年 9 月 8 日 下午 6:54

  49. Alex

    关于系统资源,我对 Firefox 4 beta 感到失望。我有一台非常快的笔记本电脑,配备 4GB 内存,运行 Windows 7,并且风扇转速明显增加——而且——奇怪的是,实现起来莫名其妙地迟缓。希望这些问题能在产品发布前得到解决。与此同时,我将继续使用 3.6.10。

    2010 年 10 月 5 日 下午 5:39

  50. WebManWalking

    以下是我希望在内联 SVG 中能起作用,但却没有起作用的事情:显然,x、y、height 和 width 属性与 CSS 和 JavaScript DOM 属性 left、top、height 和 width 分别不对应。或者至少,当我在 jQuery 动画中尝试修改它们时,它们不起作用。

    另一方面,我可以对不透明度进行动画处理,所以问题不在于正确引用 DOM 元素。所以问题仍然是,为什么我不能修改 left、top、height 和 width?

    2010 年 10 月 29 日 下午 2:15

  51. WebManWalking

    补充说明:当我使用 for .. in 循环访问相关 SVG 元素的 style 属性时,每个属性似乎都是 null。如果我分配了属性值,它会显示在数组中。(例如,当我设置不透明度时,它显示为 style[0],尽管我希望它显示在 style.opacity 中。)此外,当我尝试 alert(this.width)(而不是 this.style.width)时,我得到了“[object SVGAnimationLength]”或类似的东西。

    这是在 Firefox 4 beta 6 上进行的。

    2010 年 10 月 29 日 下午 2:57

  52. Boris

    > 显然,x、y、height 和 width 属性与 CSS 和 JavaScript DOM
    > 属性 left、top、height 和 width 分别不对应。

    这是正确的。它们在 SVG 中定义不同。

    > 另一方面,我可以对不透明度进行动画处理

    是的,SVG 以与 CSS 兼容的方式定义了不透明度。

    > 为什么我不能修改 left、top、height 和 width?

    简而言之,因为 SVG 规范说的是一回事,而 jquery 假设的是另一回事。在 jquery 上提交 bug 吗?

    2010 年 10 月 30 日 下午 7:14

  53. WebManWalking

    谢谢你的快速回复,Boris。

    我之前贡献过 2 个 jQuery 插件。我认为,与其将它归类为 jQuery 的 bug 让其他人来修复,还不如我自己想办法解决并贡献另一个插件,这样会少一些抱怨。

    Firefox 和/或 HTML5 是否公开了一个内联 SVG JavaScript API,我可以用它来实现与修改 CSS 属性相同的效果?

    2010 年 11 月 2 日 上午 7:54

    1. Boris

      你可以使用 setAttribute 来更改 x/y/width/height 属性。

      或者,对于动画方面,你可以尝试使用 SMIL 对值进行动画处理……

      2010 年 11 月 2 日 上午 8:25

  54. 何时 MathML 会得到广泛采用,从而取代网页上用于数学符号的图像?…

    Gecko 和 WebKit 都支持 MathML。就像 SVG 一样,我认为它在最近之前并没有得到广泛使用,因为把它包含在 HTML 文档中很困难。随着 HTML5 的出现,SVG 和 MathML 都可以内嵌在 HTML 页面中。参见 http…

    2010 年 12 月 27 日 下午 2:34

  55. Jukka K. Korpela

    我感到困惑:HTML5 解析器现在是否已成为 Firefox 发布版本的一部分,就像我理解的那样?在具有 HTML5 解析器的版本中,它是_唯一的_解析器,还是旧解析器的替代方案?如果它们共存,DOCTYPE 声明是否会触发选择?是否存在一些实际的主要影响,例如某些遗留标签或属性不被识别?

    2011 年 3 月 9 日 上午 10:53

    1. Boris

      在 Firefox 4 中,HTML5 解析器和旧解析器都存在,但使用哪个解析器由一个隐藏的偏好设置控制,默认值为 HTML5 解析器。页面无法控制将使用哪个解析器。

      在 Firefox 5 中,旧解析器将被删除。

      2011 年 3 月 9 日 下午 4:06

  56. ybochatay

    法国气象局现在使用基于 Firefox 和 SVG 的完整 Web 应用程序。您可以在 http://ybochatay.fr/Galerie 中找到内嵌 SVG 的演示。
    如果您有时间,请查看一下。

    2011 年 8 月 29 日 上午 1:53

本文的评论已关闭。