| // PracticalBrowserSniffer.js - Detect Browser |
| // Requires JavaScript 1.1 |
| /* |
| The contents of this file are subject to the Netscape Public |
| License Version 1.1 (the "License"); you may not use this file |
| except in compliance with the License. You may obtain a copy of |
| the License at http://www.mozilla.org/NPL/ |
| |
| Software distributed under the License is distributed on an "AS |
| IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or |
| implied. See the License for the specific language governing |
| rights and limitations under the License. |
| |
| The Initial Developer of the Original Code is Bob Clary. |
| |
| Contributor(s): Bob Clary, Original Work, Copyright 1999-2000 |
| Bob Clary, Netscape Communications, Copyright 2001 |
| |
| |
| Note: |
| |
| Acquired from: http://developer.netscape.com/evangelism/tools/practical-browser-sniffing/ |
| Last update: July 17, 2001 |
| |
| */ |
| |
| // work around bug in xpcdom Mozilla 0.9.1 |
| window.saveNavigator = window.navigator; |
| |
| // Handy functions |
| function noop() {} |
| function noerror() { return true; } |
| |
| function defaultOnError(msg, url, line) |
| { |
| // customize this for your site |
| if (top.location.href.indexOf('_files/errors/') == -1) |
| top.location = '/evangelism/xbProjects/_files/errors/index.html?msg=' + escape(msg) + '&url=' + escape(url) + '&line=' + escape(line); |
| } |
| |
| // Display Error page... |
| // XXX: more work to be done here |
| // |
| function reportError(message) |
| { |
| // customize this for your site |
| if (top.location.href.indexOf('_files/errors/') == -1) |
| top.location = '/evangelism/xbProjects/_files/errors/index.html?msg=' + escape(message); |
| } |
| |
| function pageRequires(cond, msg, redirectTo) |
| { |
| if (!cond) |
| { |
| msg = 'This page requires ' + msg; |
| top.location = redirectTo + '?msg=' + escape(msg); |
| } |
| // return cond so can use in <A> onclick handlers to exclude browsers |
| // from pages they do not support. |
| return cond; |
| } |
| |
| function detectBrowser() |
| { |
| var oldOnError = window.onerror; |
| var element = null; |
| |
| window.onerror = defaultOnError; |
| |
| navigator.OS = ''; |
| navigator.version = 0; |
| navigator.org = ''; |
| navigator.family = ''; |
| |
| var platform; |
| if (typeof(window.navigator.platform) != 'undefined') |
| { |
| platform = window.navigator.platform.toLowerCase(); |
| if (platform.indexOf('win') != -1) |
| navigator.OS = 'win'; |
| else if (platform.indexOf('mac') != -1) |
| navigator.OS = 'mac'; |
| else if (platform.indexOf('unix') != -1 || platform.indexOf('linux') != -1 || platform.indexOf('sun') != -1) |
| navigator.OS = 'nix'; |
| } |
| |
| var i = 0; |
| var ua = window.navigator.userAgent.toLowerCase(); |
| |
| if (ua.indexOf('opera') != -1) |
| { |
| i = ua.indexOf('opera'); |
| navigator.family = 'opera'; |
| navigator.org = 'opera'; |
| navigator.version = parseFloat('0' + ua.substr(i+6), 10); |
| } |
| else if ((i = ua.indexOf('msie')) != -1) |
| { |
| navigator.org = 'microsoft'; |
| navigator.version = parseFloat('0' + ua.substr(i+5), 10); |
| |
| if (navigator.version < 4) |
| navigator.family = 'ie3'; |
| else |
| navigator.family = 'ie4' |
| } |
| else if (typeof(window.controllers) != 'undefined' && typeof(window.locationbar) != 'undefined') |
| { |
| i = ua.lastIndexOf('/') |
| navigator.version = parseFloat('0' + ua.substr(i+1), 10); |
| navigator.family = 'gecko'; |
| |
| if (ua.indexOf('netscape') != -1) |
| navigator.org = 'netscape'; |
| else if (ua.indexOf('compuserve') != -1) |
| navigator.org = 'compuserve'; |
| else |
| navigator.org = 'mozilla'; |
| } |
| else if ((ua.indexOf('mozilla') !=-1) && (ua.indexOf('spoofer')==-1) && (ua.indexOf('compatible') == -1) && (ua.indexOf('opera')==-1)&& (ua.indexOf('webtv')==-1) && (ua.indexOf('hotjava')==-1)) |
| { |
| var is_major = parseFloat(navigator.appVersion); |
| |
| if (is_major < 4) |
| navigator.version = is_major; |
| else |
| { |
| i = ua.lastIndexOf('/') |
| navigator.version = parseFloat('0' + ua.substr(i+1), 10); |
| } |
| navigator.org = 'netscape'; |
| navigator.family = 'nn' + parseInt(navigator.appVersion); |
| } |
| else if ((i = ua.indexOf('aol')) != -1 ) |
| { |
| // aol |
| navigator.family = 'aol'; |
| navigator.org = 'aol'; |
| navigator.version = parseFloat('0' + ua.substr(i+4), 10); |
| } |
| |
| navigator.DOMCORE1 = (typeof(document.getElementsByTagName) != 'undefined' && typeof(document.createElement) != 'undefined'); |
| navigator.DOMCORE2 = (navigator.DOMCORE1 && typeof(document.getElementById) != 'undefined' && typeof(document.createElementNS) != 'undefined'); |
| navigator.DOMHTML = (navigator.DOMCORE1 && typeof(document.getElementById) != 'undefined'); |
| navigator.DOMCSS1 = ( (navigator.family == 'gecko') || (navigator.family == 'ie4') ); |
| |
| navigator.DOMCSS2 = false; |
| if (navigator.DOMCORE1) |
| { |
| element = document.createElement('p'); |
| navigator.DOMCSS2 = (typeof(element.style) == 'object'); |
| } |
| |
| navigator.DOMEVENTS = (typeof(document.createEvent) != 'undefined'); |
| |
| window.onerror = oldOnError; |
| } |
| |
| detectBrowser(); |
| |