这是统一进行各种特征检测的模块。这些检测的值,如果存在对应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属性,没有才是标准 |
attrHref | IE67无法区分href属性与特性(bug) |
attrStyle | IE67是没有style特性(特性的值的类型为文本),只有el.style(CSSStyleDeclaration)(bug) |
attrProp | 对于一些特殊的特性,如class, for, char,IE67需要通过映射方式才能使用getAttribute才能取到值(bug) |
cssOpacity | 是否能正确返回opacity的样式值 |
traverseAll | IE678的getElementByTagName("*")无法遍历出Object元素下的param元素(bug) |
createAll | IE678不能通过innerHTML生成link,style,script节点(bug) |
cloneHTML5 | IE6789由于无法识别HTML5的新标签,因此复制这些新元素时也不正确(bug) |
cloneNode | 在标准浏览器下,cloneNode(true)是不复制事件的,以防止循环引用无法释放内存,而IE却没有考虑到这一点,把事件复制了(inconformity) |
cloneChecked | IE6789的checkbox、radio控件在cloneNode(true)后,新元素没有继承原来的checked属性(bug) |
fastFragment | fastFragment 是否支持createContextualFragment API,此方法发端于FF3,因此许多浏览器不支持或实现存在BUG,但它是将字符串转换为文档碎片的最高效手段 |
inlineBlock | 在IE678中,非替换元素在设置了大小与hasLayout的情况下,会将其父级元素撑大(inconformity) |
cssPercentedMargin | getComputedStyle API是否能支持将margin的百分比原始值自动转换为像素值 |
boxModel | 是否遵循w3c的盒子boxModel去计算元素的大小(IE存在怪异模式,inconformity) |