首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Internet需要"hasLayout“标志?

为什么Internet需要"hasLayout“标志?
EN

Stack Overflow用户
提问于 2009-07-22 01:35:47
回答 2查看 1K关注 0票数 3

就像许多为Internet开发网站的开发人员一样,我似乎遇到了许多由臭名昭著的标志引起的bug。

我理解这个标志是干什么的,它是如何工作的(在大多数情况下)。我前几天读到的一个很好的解释(虽然我找不到源代码)是,hasLayout在IE中的实质意思是“使这个元素成为一个矩形”。

它显然比这更复杂,但用它来概括(在我看来)是相当好的。

我不明白为什么浏览器会使用这个标志。在寻找答案时,我发现了一个听起来合乎逻辑的答案:

必须处理非常古老的遗留代码,在CSS真正处于全盛时期之前。作为使浏览器易于向其添加CSS的体系结构决定,hasLayout标志被用来触发某些CSS属性,以便正确地呈现页面。这可以追溯到IE4时代。

这对我来说几乎是有意义的,直到我意识到Firefox (当时的Netscape)必须解决同样的问题。据我所知,Netscape存在的时间和Internet一样长,但据我所知,它不需要任何内部hasLayout标志或任何类似的标志。

考虑到hasLayout标志是Internet中这么多bug的来源,有人知道为什么IE有这个标志而其他浏览器不需要它吗?

这是我想知道的纯粹出于好奇,如果有人有任何理论或碰巧知道答案。我想更多地了解为什么(或者为什么不)这个标志是有用的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-22 01:44:13

网景渲染器是完全重写后NS4。IE的“三叉戟”渲染引擎没有得到这样的爱。这个很好的商业意义 - IE在NS被重写的时候继续逐步改进,部分是因为这一点(部分是因为它的分发安排.)赢得了巨大的市场份额..。

但是最终的结果是一个旧的、残酷的代码库,这给开发人员带来了麻烦,因此他们必须痛苦地意识到什么应该是隐藏的实现细节。

现在,最后一点是关键:浏览器的呈现器是一种抽象,允许您在几行标记中创建需要数百行或数千行低级别呈现和事件处理代码的内容。就像所有的程序抽象一样,它泄露了一点.IE,Netscape,Firefox,Opera,Webkit.每个浏览器都有开发人员狂热地工作来堵塞抽象中的漏洞。除了,五年来,IE没有。其他漏洞被堵塞,但渲染引擎变得越来越像筛网。

这些因素合在一起,共同揭露了像hasLayout这样的事情。

票数 11
EN

Stack Overflow用户

发布于 2009-07-22 02:55:54

如果不能够查看它们的源代码,就很难知道。

以下链接是我迄今发现的信息最丰富的链接:

  • IE/Win中的hasLayout概念
  • /IE7/说明/

第一个引用了一个过时的文件,其中包含了一个非常有趣的句子:

在内部,拥有布局意味着元素负责绘制自己的内容。

第二个人说:

资源管理器中的对象模型似乎是文档模型和它们的传统应用程序模型的混合。

将两者结合起来,我的猜测是hasLayout元素实际上是Win32 API意义上的窗口--也就是说,CreateWindow处理的事情。因此,没有hasLayout的元素没有自己的“窗口”,而是使用某种布局代码(有点像Qt的布局类),由它们最近的hasLayout-having祖先绘制。因为只有真正的“窗口”有布局代码(它绘制的布局没有下降值),所以hasLayout

如果是这样的话,将有两个不同的代码路径布局代码(一个用于hasLayout,它必须定位“窗口”,以便以后可以使用正常的窗口绘图系统绘制它们,以及一个在绘制“窗口”时手工绘制hasLayout“窗口”的子路径)。因为所有的代码都有bug(而且有大量的证据表明IE<=6的bug超过平均水平),这两种代码路径都会有不同的bug,这就解释了为什么添加或删除hasLayout (实际上切换到另一个代码路径)会改变影响所讨论的元素的一组bug。不仅如此,由于有两个代码路径在同一个文档中工作,所以这两个代码路径的迭代将是另一个丰富的微妙bug来源。

其他浏览器可能只是通过使用没有这种双重布局路径的体系结构来避免这个问题。

如果我的猜测是正确的,我会说,如果您使用一个工具来显示浏览器正在使用的所有子窗口,您会发现每个可见的hasLayout元素都有一个,而没有布局的元素则没有一个。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1162625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档