1/***************************************************************************************** 2 * Firma: Hehner Reus Systems GmbH 3 * Projekt: com.cerno.newsletter 4 * Datei: Browser.js 5 * Erstellung: 08.12.2010 6 * Verwendung: JavaScript-Klasse mit einigen Methoden für den Umgang mit den gängisten 7 * Browsern. Methoden sind über ein globales Objekt zugänglich 8 * Beispiel: 9 * HRBrowser.addToFavorites('blubber', 'http:'); 10 * 11 * $Id: Browser.js,v 1.13 2024/03/12 10:31:02 lpo Exp $ 12 *****************************************************************************************/ 13 14/** 15 * Der Konstruktor für unsere Browser-Klasse. 16 * Normalerweise ist es nicht nötig das Objekt zu instanzieren, 17 * da es bereits ein globales Objekt namens Browser gibt. 18 */ 19HRBrowserClass = function() 20{ 21 // 22 // Einige Konstanten: 23 // 24 this.KennungFirefox = 'firefox'; 25 this.KennungIE = 'msie'; 26 this.KennungIE11 = 'trident'; 27 this.KennungEdge = 'edge'; 28 29 this.KennungWebkit = 'applewebkit'; 30 this.KennungSafari = 'safari'; 31 this.KennungChrome = 'chrome'; 32 this.KennungOpera = 'opera'; 33 this.KennungKonqueror = 'konqueror'; 34 this.KennungVersion = 'version'; 35 36 this.KennungMobilePlattformiPhone = 'iphone'; 37 this.KennungMobilePlattformiPod = 'ipod'; 38 this.KennungMobilePlattformiPad = 'ipad'; 39 this.KennungMobilePlattformAndroid = 'android'; 40 this.KennungMobilePlattformBlackBerry = 'blackberry'; 41 this.KennungMobilePlattformWindows = 'iemobile'; 42 43 this.m_UserAgentLowerCase = navigator.userAgent.toLowerCase(); 44} 45 46/** 47 * Methode überprüft, ob der übergebene Name im userAgent des navigators vorkommt. 48 * Die Groß-/Kleinschreibung ist dabei egal. 49 * @param {Object} name 50 */ 51HRBrowserClass.prototype.checkName = function(name) 52{ 53 try 54 { 55 var agent = this.m_UserAgentLowerCase; 56 if (agent.indexOf(name.toLowerCase())>-1) 57 { 58 return true; 59 } 60 } 61 catch(e) 62 {} 63 return false; 64} 65 66/** 67 * Gibt true zurück wenn der aktuelle Browser der Firefox ist, 68 * ansonsten false. 69 */ 70HRBrowserClass.prototype.isFirefox = function() 71{ 72 return this.checkName(this.KennungFirefox); 73} 74 75/** 76 * Gibt true zurück wenn der aktuelle Browser der InternetExplorer ist, 77 * ansonsten false. 78 */ 79HRBrowserClass.prototype.isIE = function() 80{ 81 return this.checkName(this.KennungIE) || this.checkName(this.KennungIE11); 82} 83 84/** 85 * Gibt true zurück wenn der aktuelle Browser der InternetExplorer ist, 86 * ansonsten false. 87 */ 88HRBrowserClass.prototype.isEdge = function() 89{ 90 return this.checkName(this.KennungEdge); 91} 92 93/** 94 * Gibt true zurück, wenn der aktuelle Browser von Microsoft stammt. 95 * ansonsten false. 96 */ 97HRBrowserClass.prototype.isMicrosoft = function() 98{ 99 return this.isIE() || this.isEdge(); 100} 101 102/** 103 * Gibt true zurück wenn der aktuelle Browser der Apple Webkit ist, 104 * ansonsten false. 105 */ 106HRBrowserClass.prototype.isWebkit = function() 107{ 108 return this.checkName(this.KennungWebkit); 109} 110 111/** 112 * Gibt true zurück wenn der aktuelle Browser der Apple Safari ist, 113 * ansonsten false. 114 * Achtung Safari meldet sich auch als webkit. 115 */ 116HRBrowserClass.prototype.isSafari = function() 117{ 118 return this.checkName(this.KennungSafari); 119} 120 121/** 122 * Gibt true zurück wenn der aktuelle Browser der Google Chrome ist, 123 * ansonsten false. 124 * Achtung meldet sich auch als webkit und Safari. 125 */ 126HRBrowserClass.prototype.isChrome = function() 127{ 128 return this.checkName(this.KennungChrome); 129} 130 131/** 132 * Gibt true zurück wenn der aktuelle Browser der Google Chrome ist, 133 * ansonsten false. 134 */ 135HRBrowserClass.prototype.isOpera = function() 136{ 137 return this.checkName(this.KennungOpera); 138} 139 140/** 141 * Gibt true zurück, wenn wir uns im Browser eines "mobilen" 142 * Geräts befinden (Smartphone / Tablet). 143 */ 144HRBrowserClass.prototype.isMobile = function() 145{ 146 if ( this.checkName(this.KennungMobilePlattformiPhone) 147 || this.checkName(this.KennungMobilePlattformiPod) 148 || this.checkName(this.KennungMobilePlattformiPad) 149 || this.checkName(this.KennungMobilePlattformAndroid) 150 || this.checkName(this.KennungMobilePlattformBlackBerry) 151 || this.checkName(this.KennungMobilePlattformWindows)) 152 { 153 return true; 154 } 155 return false; 156} 157 158/** 159 * Gibt true zurück, wenn wir uns im Browser eines "Android" 160 * Geräts befinden (Smartphone / Tablet). 161 */ 162HRBrowserClass.prototype.isAndroid = function() 163{ 164 if (this.checkName(this.KennungMobilePlattformAndroid)) 165 { 166 return true; 167 } 168 return false; 169} 170 171/** 172 * Gibt true zurück, wenn wir uns im Browser eines "iOS" 173 * Geräts befinden (iPhone / iPad). 174 */ 175HRBrowserClass.prototype.isiOS = function() 176{ 177 if (this.checkName(this.KennungMobilePlattformiPhone) || this.checkName(this.KennungMobilePlattformiPod) || this.checkName(this.KennungMobilePlattformiPad)) 178 { 179 return true; 180 } 181 return false; 182} 183 184/** 185 * Gibt true zurück, wenn wir uns im Browser eines "iPhone" 186 * befinden (iPhone / iPod). 187 */ 188HRBrowserClass.prototype.isiPhone = function() 189{ 190 if (this.checkName(this.KennungMobilePlattformiPhone) || this.checkName(this.KennungMobilePlattformiPod)) 191 { 192 return true; 193 } 194 return false; 195} 196 197/** 198 * Gibt die Versionsnummer des Browsers zurück. 199 * Die VersionsNr richtet sich dabei nach dem verwendeten Browser. 200 * Bei Safari und Chrome die beispielsweise beide Webkit als Engine verwendet, 201 * wird nicht die Webkit-Version sondern die spezifische VersionsNr zurückgegeben. 202 */ 203HRBrowserClass.prototype.getVersionsNr = function() 204{ 205 var versionsNr = -1; 206 try 207 { 208 // 209 // Insbesondere bei Chrome, Safari und Webkit ist die Reihenfolge der Abfragen wichtig! 210 // 211 if (this.isFirefox()) 212 return this.getVersionsNrHinterKennung(this.KennungFirefox); 213 else if (this.isIE()) 214 return this.getIEVersionsNr(); 215 else if (this.isChrome()) 216 return this.getVersionsNrHinterKennung(this.KennungChrome); 217 else if (this.isSafari()) 218 return this.getVersionsNrHinterKennung(this.KennungVersion); 219 else if (this.isWebkit()) 220 return this.getVersionsNrHinterKennung(this.KennungWebkit); 221 else if (this.isOpera()) 222 return this.getVersionsNrHinterKennung(this.KennungVersion); 223 else 224 return this.getVersionsNrHinterKennung(this.KennungVersion); 225 } 226 catch (e) 227 { 228 } 229 return versionsNr; 230} 231 232/** 233 * Liefert die VersionsNr des Browser, wenn es sich um den IE handelt, 234 * ansonsten -1, wenn ein anderer Browser zum Einsatz kommt. 235 * Methode dient der Schreiberleichterung, da ggfs. die Abfrage des Browsers 236 * entfallen kann. 237 */ 238HRBrowserClass.prototype.getIEVersionsNr = function() 239{ 240 var versionsNr = -1; 241 if (this.checkName(this.KennungIE)) 242 { 243 versionsNr = this.getVersionsNrHinterKennung(this.KennungIE); 244 } 245 else if (this.checkName(this.KennungIE11)) 246 { 247 versionsNr = this.getVersionsNrHinterKennung(this.KennungIE11); 248 if (versionsNr <= 5) 249 versionsNr = 9.0; 250 else if (versionsNr <= 6) 251 versionsNr = 10.0; 252 else if (versionsNr > 6) 253 versionsNr = 11.0; 254 } 255 return versionsNr; 256} 257 258/** 259 * Liefert die VersionsNr des Browser, wenn es sich um den Webkit handelt, 260 * ansonsten -1, wenn ein anderer Browser zum Einsatz kommt. 261 * Methode ist ggfs. wichtig, da Chrome beispielsweise den Webkit verwendet. 262 */ 263HRBrowserClass.prototype.getWebkitVersionsNr = function() 264{ 265 var versionsNr = -1; 266 if (this.isWebkit()) 267 versionsNr = this.getVersionsNrHinterKennung(this.KennungWebkit); 268 269 return versionsNr; 270} 271 272 273/** 274 * Liefert die erste Zahl hinter dem Token im AgentString des Browsers. 275 */ 276HRBrowserClass.prototype.getVersionsNrHinterKennung = function(kennung) 277{ 278 var versionsNr = -1; 279 try 280 { 281 var agentStr = this.m_UserAgentLowerCase; 282 var startIndex = agentStr.indexOf(kennung.toLowerCase()); 283 if (startIndex >= 0) 284 { 285 startIndex += kennung.length; 286 while (isNaN(agentStr.charAt(startIndex)) && startIndex < agentStr.length) 287 startIndex++; 288 289 if (startIndex < agentStr.length) 290 { 291 agentStr = agentStr.substring(startIndex); 292 versionsNr = parseFloat(agentStr); 293 } 294 } 295 } 296 catch (e) 297 {} 298 return versionsNr; 299} 300 301 302/** 303 * Fügt die URL unter dem Namen zu den Favoriten hinzu. 304 * Funktioniert zur Zeit nur in IE und Firefox. 305 * Im Firefox ist es auch nur eine etwas unschöne Behelfslösung. 306 * @param {Object} name 307 * @param {Object} url 308 */ 309HRBrowserClass.prototype.addToFavorites = function(name, url) 310{ 311 try 312 { 313 if (name && url) 314 { 315 if (window.sidebar) // Firefox 316 {
317 window.sidebar.addPanel(name, url, ''); 318 } 319 if (window.external && typeof (window.external.AddFavorite) !== "undefined") // Internet 320 // Explorer 321 { 322 window.external.AddFavorite(url, name); 323 } 324 } 325 } 326 catch (e) 327 {} 328} 329 330/** 331 * Setzt die URL in homepage als neue Startseite des Browser. 332 * Funktioniert zur Zeit nur im IE. In anderen Browsern scheint 333 * diese Funktionalität nicht vorgesehen zu sein. 334 * 335 * @param {Object} homepage Neue URL als Startseite. 336 */ 337HRBrowserClass.prototype.setAsDefaultHome = function(homepage) 338{ 339 try 340 { 341 if (this.isIE()) 342 { 343 document.body.style.behavior = 'url(#default#homepage)'; 344 document.body.setHomePage(homepage); 345 } 346 } 347 catch (e) 348 {} 349} 350 351/** 352 * Prüft, ob die Do-Not-Track-Einstellung des Browsers gesetzt ist. 353 * 354 * @return {boolean} true, falls die Do-Not-Track-Einstellung gesetzt ist und false, 355 * falls nicht oder der Browser diese Einstellung nicht unterstützt. 356 */ 357HRBrowserClass.prototype.isDoNotTrackActive = function() 358{ 359 try 360 { 361 if (window.doNotTrack || navigator.doNotTrack || navigator.msDoNotTrack) 362 return (window.doNotTrack == "1" || navigator.doNotTrack == "yes" || navigator.doNotTrack == "1" || navigator.msDoNotTrack == "1"); 363 else 364 { 365 // Der Browser unterstütz kein do-not-track. 366 return false; 367 } 368 } 369 catch (e) 370 { 371 if (typeof(HRLogError) == 'function') 372 HRLogError(e); 373 } 374} 375 376/** 377 * Wir legen ein globales Browser-Objekt an, so dass wir bequem z.B. mit 378 * HRBrowser.checkName(..) auf die verschiedenen Funktionen zugreifen können. 379 */ 380var HRBrowser = new HRBrowserClass();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.