像许多在Internet Explorer网站上工作的开发人员一样,我似乎遇到了很多由臭名昭着的hasLayout
旗帜引起的错误.
我理解这个标志的作用以及它是如何工作的(大多数情况下).我前几天阅读的一个很好的解释(虽然我找不到源代码)是hasLayout
在IE中本质上意味着"使这个元素成为一个矩形".
它显然比那更复杂,但它很好地总结了(在我看来).
我不明白的是浏览器使用此标志的原因.在寻找答案时,我找到了一个听起来合乎逻辑的答案:
在CSS真正全面展开之前,Internet Explorer必须处理非常旧的遗留代码.作为使浏览器易于添加CSS的架构决策,该
hasLayout
标志用于触发某些CSS属性,以便正确呈现页面.这可以追溯到IE4时代.
这几乎对我有意义,直到我意识到Firefox(当时的Netscape)必须处理同样的问题.Netscape几乎与Internet Explorer一样长,但hasLayout
据我所知,它不需要任何内部标志或类似内容.
看看hasLayout
标志是如何在Internet Explorer中出现如此多的错误,有谁知道为什么IE有这个标志而其他浏览器不需要它?
如果有人有任何理论或碰巧知道答案,我想纯粹出于好奇而知道这件事.我想更多地了解为什么(或为什么不)这个标志是有用的.
Netscape渲染器在NS4之后完全重写.IE的"三叉戟"渲染引擎没有这样的爱.这具有良好的商业意识 - 在重新编写NS时,IE继续逐步改进,部分原因在于(部分原因在于其分销安排......)设法占据了市场的巨大份额......
但最终的结果是一个旧的,狡猾的代码库,它让开发人员感到生气,因此他们必须痛苦地意识到应该隐藏的实现细节.
现在,最后一点是关键:浏览器的渲染器是一个抽象,允许您在几行标记中创建需要数百或数千行低级渲染和事件处理代码的东西.和所有编程抽象一样,它有点漏洞......对于IE,Netscape,Firefox,Opera,Webkit来说都是如此......而且每个浏览器都有开发人员狂热地插入抽象漏洞.除了,五年,IE没有.其他泄漏被堵塞,但渲染引擎变得越来越像筛子.
总之,这些因素共同暴露了诸如此类的东西hasLayout
.