// 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('safari') != -1) { | |
navigator.family = 'nn4'; | |
navigator.version = 4; | |
navigator.org = 'netscape'; | |
} | |
else 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(); | |