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属性,没有才是标准 |
| 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) |
机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
浙公网安备 33010602011771号