2011-08-30 65 views
0

我正在修复Firefox 3.6上朋友网页中的显示错误。它在所有其他浏览器中正确显示。我已经缩小到这个问题:在大多数浏览器中,生成的HTML和解析为这样:Firefox 3.6部分渲染问题

<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/。主页看起来很好,但所有其他页面(通过单击顶部栏达到)都被打破。

+3

有链接。没有必要为此丢掉你的帽子...... –

+0

在FF6中看起来很好,可能只是FF 3.6的问题。 – Mrchief

回答

1

您的样品不符合您的网页。

问题是你没有足够的</div>标签。里面带class =“侧边栏”的部分,有三个DIV开始标记

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

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

在这种情况下,Firefox 4和更高版本等现代浏览器遵循HTML5解析规则。 The relevant one says当解析器遇到:

结束标签,其标签名称是一个“地址”,“商品”,“搁置”, “块引用”,“按钮”,“中心”,“细节“,”dir“,”div“,”dl“, ”fieldset“,”figcaption“,”figure“,”footer“,”header“,”hgroup“, ”listing“,”menu“,” “,”ol“,”pre“,”section“,”summary“,”ul“

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

否则,执行这些步骤:

  1. 生成暗示结束标记。

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

  3. 从堆栈中弹出元素,直到元素 具有与令牌相同的标记名称从堆栈弹出。

步骤1在这种情况下没有影响。步骤2只是表明有什么不对,但步骤3说推断应该有一个</div>标签,然后匹配</section>标签和它的开始标签。这就是为什么你的网页被其他浏览器视为OK的原因。

但是,Firefox 3.x会预先设定HTML5解析算法,这意味着您可以随时随地使用任何错误恢复功能。你可能会很幸运,你可能不会。在这种情况下,缺少end div标签会导致Firefox放弃</section>标签,因为它并不期待它。