mass Framework support模块 v2

这是统一进行各种特征检测的模块。这些检测的值,如果存在对应DOM API并且其行为与大多数标准浏览器的行为一致为true,否则为false。false值越多说明该浏览器越落后,在我的测试列表中,FF9是做得最好的,全部为true,最差的不用说是哪个吧。就算是IE9也不尽人意,我还是需要为它做N多兼容代码。webkit系的也没有想象中的好。标准化之路任重道远啊。

本版本的改进:

  • 发现boxModel,inlineBlock,keepSize,cssPercentedMargin这些特征必须等到domReady后才能检测,因此做了迟时处理。
  • 一些特征进行了改名,cloneAll更名为cloneNode,attrSelected更名为optSelected,inlineBlockNeedsLayout 更名为inlineBlock, shrinkWrapBlocks更名为keepSize。
  • 去掉reliableHiddenOffsets,增加cssPercentedMargin,cloneHTML5,cloneChecked。

下面是mass Framework需要嗅探的特征一览表:

名称详明
insertTbody标准浏览器只有在table与tr之间不存在tbody的情况下添加tbody,而IE678则笨多了,即在里面为空也乱加tbody
checkOn在大多数游览器中checkbox的value默认为on,唯有chrome返回空字符串
optSelected当为select元素添加一个新option元素时,此option会被选中,但IE与早期的safari却没有这样做,需要访问一下其父元素后才能让它处于选中状态(bug)
optDisabled判定disabled的select元素内部的option元素是否也有diabled属性,没有才是标准
attrHrefIE67无法区分href属性与特性(bug)
attrStyleIE67是没有style特性(特性的值的类型为文本),只有el.style(CSSStyleDeclaration)(bug)
attrProp对于一些特殊的特性,如class, for, char,IE67需要通过映射方式才能使用getAttribute才能取到值(bug)
cssOpacity是否能正确返回opacity的样式值
traverseAllIE678的getElementByTagName("*")无法遍历出Object元素下的param元素(bug)
createAllIE678不能通过innerHTML生成link,style,script节点(bug)
cloneHTML5 IE6789由于无法识别HTML5的新标签,因此复制这些新元素时也不正确(bug)
cloneNode在标准浏览器下,cloneNode(true)是不复制事件的,以防止循环引用无法释放内存,而IE却没有考虑到这一点,把事件复制了(inconformity)
cloneCheckedIE6789的checkbox、radio控件在cloneNode(true)后,新元素没有继承原来的checked属性(bug)
fastFragmentfastFragment 是否支持createContextualFragment API,此方法发端于FF3,因此许多浏览器不支持或实现存在BUG,但它是将字符串转换为文档碎片的最高效手段
inlineBlock在IE678中,非替换元素在设置了大小与hasLayout的情况下,会将其父级元素撑大(inconformity)
cssPercentedMargingetComputedStyle API是否能支持将margin的百分比原始值自动转换为像素值
boxModel是否遵循w3c的盒子boxModel去计算元素的大小(IE存在怪异模式,inconformity)

源码地址

原文地址:https://www.cnblogs.com/rubylouvre/p/2332647.html