0

我正在努力修复 Firefox 3.6 上朋友网页中的显示错误。它在所有其他浏览器中正确显示。我已将问题缩小到这一点:在大多数浏览器中,HTML 是这样生成和解析的:

<section class="sidebar" style="height: 1106px; "><div class="sidebar-widget"><h3     class="sidebar-widget-title">Shopping Cart</h3><div id="sliding_cart" class="shopping-cart-wrapper">
    <p class="empty">
        Your shopping cart is empty<br>
        <a target="_parent" href="https://underwateraudio.com/products-page/" class="visitshop" title="Visit Shop">Visit the shop</a>   
    </p>

</div> </div></section>

<section id="main-content"> ... </section>

但是,在 Firefox 3.6 中,页面显示就好像该行</div> </div> </section>根本不存在。我在 Firebug 中查看了它,确实 Firefox 出于某种原因取消了该结束标签。我不明白为什么 Firefox 3.6 去掉了这个标签。

如果您想查看页面本身,请查看https://underwateraudio.com/underwater-audio-faq/。主页看起来不错,但所有其他页面(通过单击顶部栏到达)都已损坏。

4

2 回答 2

1

您的示例与您的页面不匹配。

问题是您没有足够的</div>标签。在 class="sidebar" 的部分内,有 3 个 div 开始标签

 <div class="sidebar-widget">
 <div id="sliding-cart">
 <div class="wpsc_cart_loading">

但只有两个结束 div 标签,然后是结束部分标签。

在这种情况下,现代浏览器(如 Firefox 4 及更高版本)遵循 HTML5 解析规则。相关的说,当解析器遇到:

一个结束标签,其标签名称是以下之一:“address”、“article”、“aside”、“blockquote”、“button”、“center”、“details”、“dir”、“div”、“dl”、 “fieldset”、“figcaption”、“figure”、“footer”、“header”、“hgroup”、“listing”、“menu”、“nav”、“ol”、“pre”、“section”、“summary” ", "ul"

如果打开元素的堆栈在范围内没有与标记名称相同的元素,则这是一个解析错误;忽略令牌。

否则,请运行以下步骤:

  1. 生成隐含的结束标签。

  2. 如果当前节点不是与标记名称相同的元素,那么这是一个解析错误。

  3. 从打开的元素堆栈中弹出元素,直到从堆栈中弹出与标记名称相同的元素。

在这种情况下,步骤 1 无效。第 2 步只是表明有问题,但第 3 步说推断那里应该有一个</div>标签,然后将</section>标签与其起始标签匹配。这就是为什么您的页面被其他浏览器视为正常的原因。

但是 Firefox 3.x 早于 HTML5 解析算法,这意味着您将受制于浏览器所提供的任何错误恢复。你可能会很幸运,也可能不会。在这种情况下,缺少结束 div 标签会导致 Firefox 丢弃该</section>标签,因为它没有预料到它。

于 2011-08-30T23:46:00.750 回答
0

根据一些快速研究,Firefox 似乎<section>直到 FF4 才获得支持。

https://developer.mozilla.org/en/HTML/Element/section

也许使用 HTML5Shim(针对较旧的 FF)将有助于纠正这个问题?

http://code.google.com/p/html5shim/

于 2011-08-30T22:11:10.277 回答