1 2 /** 3 * @private 4 * @description Get detailed information about 5 * @constructor 6 * @class 7 * @version 0.1a 8 */ 9 function browserInfo(){ 10 this.browserEngine = { 11 FIREFOX : 1, 12 OPERA : 2, 13 IE : 3, 14 WEBKIT : 4, 15 SAFARI : 5, 16 UNKNOWN : 6 17 }; 18 19 this.browser = { 20 FIREFOX_2 : 1, 21 FIREFOX_3 : 2, 22 SAFARI_2 : 3, 23 SAFARI_3 : 4, 24 SAFARI_4 : 5, 25 OPERA_9 : 6, 26 IE_6 : 7, 27 IE_7 : 8, 28 IE_8 : 9, 29 WEBKIT : 10, 30 NETSCAPE : 11, 31 UNKNOWN : 12, 32 OPERA : 13, 33 SAFARI : 14, 34 IE : 15 35 }; 36 37 this.platform = { 38 WINDOWS : 1, 39 MACINTEL : 2, 40 MACPPC : 9, 41 LINUX : 3, 42 SOLARIS : 4, 43 BSD : 5, 44 MOBILE : 6, 45 IPHONE : 7, 46 UNKNOWN : 8 47 }; 48 this.current = null; 49 return this; 50 } 51 52 browserInfo.prototype = { 53 isBrowser : function(b){ 54 if(this.browser[b] && this.browser[b] == this.current.BROWSER)return true; 55 return false; 56 }, 57 /** 58 * Method to get browser engine 59 * @param e Engine name (possible FIREFOX, OPERA, IE, WEBKIT, SAFARI) 60 * @return boolean 61 */ 62 isEngine : function(e){ 63 if(this.browserEngine[e] && this.browserEngine[e] == this.current.BROWSER_ENGINE)return true; 64 return false; 65 }, 66 /** 67 * @function 68 * @description Method to parse array with browser version to associative array 69 * @param v array with browser version in format: array(major, minor, build) 70 * @return associative array ( MAJOR : major, MINOR : minor, BUILD : build) 71 */ 72 _setBrowserVersion : function(v){ 73 return { 74 MAJOR : parseInt(v[0]), 75 MINOR : parseInt(v[1]), 76 BUILD : parseInt(v[2]) 77 }; 78 }, 79 /** 80 * get an browser engine, browser version and platform 81 * @return browser num 82 */ 83 process : function(){ 84 var RV = { 85 PLATFORM : 0, 86 BROWSER : 0, 87 BROWSER_ENGINE : 0, 88 BROWSER_VERSION : { 89 MAJOR : 0, 90 MINOR : 0, 91 BUILD : 0 92 } 93 }; 94 95 var s = navigator.userAgent; 96 var p = navigator.platform; 97 98 // platforms 99 var is_macintel = p.indexOf('MacIntel') != -1 ? true : false; 100 var is_macppc = p.indexOf('MacPPC') != -1 ? true : false; 101 var is_windows = s.indexOf('Windows') > 0 ? true : false; 102 var is_linux = p.indexOf('Linux') > 0 ? true : false; 103 var is_bsd = p.indexOf('BSD') > 0 ? true : false; 104 var is_solaris = p.indexOf('Solaris') > 0 ? true : false; 105 106 // browser engine 107 var is_webkit = s.indexOf('KHTML/') > 0 ? true : false; 108 var is_safari = s.indexOf('Safari/') > 0 ? true : false; 109 var is_firefox = s.indexOf('Firefox/') > 0 ? true : false; 110 var is_netstapce = s.indexOf('Netscape/') > 0 ? true : false; 111 var is_opera = s.indexOf('Opera/') > -1 ? true : false; 112 var is_ie = s.indexOf('MSIE ') > -1 ? true : false; 113 114 115 // set platform 116 if(is_macintel){ 117 RV.PLATFORM = this.platform.MACINTEL; 118 }else 119 if(is_macppc){ 120 RV.PLATFORM = this.platform.MACPPC; 121 }else 122 if(is_windows){ 123 RV.PLATFORM = this.platform.WINDOWS; 124 }else{ 125 RV.PLATFORM = this.platform.UNKNOWN; 126 } 127 128 // set browser engine 129 if(is_firefox){ 130 RV.BROWSER_ENGINE = this.browserEngine.FIREFOX; 131 //FF 132 var re = new RegExp("Firefox\\\/(\\d+)\\.(\\d+)\\.(\\d+)"); 133 var v = re.exec(s); 134 if(v != null){ 135 RV.BROWSER_VERSION = this._setBrowserVersion(v.slice(1)); 136 } 137 138 // set concrete browser version 139 if(RV.BROWSER_VERSION.MAJOR == 2){ 140 RV.BROWSER = this.browser.FIREFOX_2; 141 }else 142 if(RV.BROWSER_VERSION.MAJOR == 3){ 143 RV.BROWSER = this.browser.FIREFOX_3; 144 } 145 }else 146 if(is_opera){ 147 var re = new RegExp("Opera\\\/(\\d+)\\.(\\d+)"); 148 var v = re.exec(s); 149 if(v != null){ 150 // add build because it's undefined in Opera 151 v[v.length] = 0; 152 RV.BROWSER_VERSION = this._setBrowserVersion(v.slice(1)); 153 } 154 155 RV.BROWSER_ENGINE = this.browserEngine.OPERA; 156 157 // set concrete browser version 158 if(RV.BROWSER_VERSION.MAJOR == 9){ 159 RV.BROWSER = this.browser.OPERA_9; 160 }else{ 161 RV.BROWSER = this.browser.OPERA; 162 } 163 }else 164 if(is_safari){ 165 var re = new RegExp("Version\\\/(\\d+)\\.(\\d+)"); 166 var v = re.exec(s); 167 if(v != null){ 168 // add build for Safari 169 v[v.length] = 0; 170 RV.BROWSER_VERSION = this._setBrowserVersion(v.slice(1)); 171 } 172 173 RV.BROWSER_ENGINE = this.browserEngine.SAFARI; 174 175 // set concrete browser version 176 if(RV.BROWSER_VERSION.MAJOR == 2){ 177 RV.BROWSER = this.browser.SAFARI_2; 178 }else 179 if(RV.BROWSER_VERSION.MAJOR == 3){ 180 RV.BROWSER = this.browser.SAFARI_3; 181 }else 182 if(RV.BROWSER_VERSION.MAJOR == 4){ 183 RV.BROWSER = this.browser.SAFARI_4; 184 }else{ 185 RV.BROWSER = this.browser.SAFARI; 186 } 187 }else 188 if(is_webkit){ 189 RV.BROWSER_ENGINE = this.browserEngine.WEBKIT; 190 }else 191 if(is_ie){ 192 //IE 193 var re = new RegExp("MSIE\\s(\\d+)\\.(\\d+);"); 194 var v = re.exec(s); 195 if(v != null){ 196 // add build for IE 197 v[v.length] = 0; 198 RV.BROWSER_VERSION = this._setBrowserVersion(v.slice(1)); 199 } 200 201 RV.BROWSER_ENGINE = this.browserEngine.IE; 202 203 // set concrete browser version 204 if(RV.BROWSER_VERSION.MAJOR == 6){ 205 RV.BROWSER = this.browser.IE_6; 206 }else 207 if(RV.BROWSER_VERSION.MAJOR == 7){ 208 RV.BROWSER = this.browser.IE_7; 209 }else 210 if(RV.BROWSER_VERSION.MAJOR == 8){ 211 RV.BROWSER = this.browser.IE_8; 212 }else{ 213 RV.BROWSER = this.browser.IE; 214 } 215 }else{ 216 RV.BROWSER_ENGINE = this.browserEngine.UNKNOWN; 217 RV.BROWSER = this.browser.UNKNOWN; 218 } 219 220 this.current = RV; 221 return this; 222 } 223 } 224