代码兼容大全 - pod4g/tool GitHub Wiki

  1. 通过document对象获取window对象

     // IE9+ 用defaultView获取
     // IE8- 用parentWindow获取
     var win = document.defaultView || document.parentWindow;
    
  2. 判断是混杂模式还是标准模式(用于判断IE)

// 所有浏览器都支持这个属性
// 如果是IE浏览器,且IE浏览器的文档模式是“杂项(Quirks)”,则mode的值是"BackCompat"
// 其他浏览器为"CSS1Compat"
var mode = document.compatMode;
  1. 判断文档类型(用于IE)
// IE6以上的浏览器支持这个属性
// 返回相应的版本号
// 如IE7返回数字 7
// 其他非IE浏览器返回undefined
var version = document.documentMode;
  1. navagitor的有用的属性
 // I67+都支持的属性
 navigator.appCodeName; // Mozilla
 navigator.appName; // Microsoft Internet Explorer or Netscape ...
 navigator.platform; // Win32 or MacIntel ...
  1. getOwnPropertyDescriptor 及 defineProperty的兼容性问题

    
     // {enumerable: true, configurable: true ,get , set} // ch/ff/op
     // {enumerable: true, configurable: true ,undefined , undefined} // safari
     var npDes = Object.getOwnPropertyDescriptor(Node.prototype, 'nodeValue');
    
    
     // {enumerable: true, configurable: true, set , get} // ch/ff/op
     // {enumerable: true, configurable: false, get: undefined, set: undefined} // safari
     var epDes = Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML');
    
     // 可以看到getOwnPropertyDescriptor在safari中存在兼容性问题
    
    
     // safari TypeError: Attempting to change the getter of an unconfigurable property.
     // ch/ff/op done!!
     Object.defineProperty(Element.prototype,'innerHTML', {
         get: function(){ 
               return 1;
         }
     })