There's a javascript function that helps identify most browsers here.
Its worth keeping up to date on, as it is updating regularly.
By way of explanation the following is copied from the linked page:
Browser detection
The dataBrowser array is filled with objects that contain the properties that help the script detect your users' browser. Note its general syntax:
dataBrowser: [
{
prop: window.opera,
identity: "Opera",
versionSearch: "Version" // note: no comma
},
{
string: navigator.userAgent,
subString: "MSIE",
identity: "Explorer",
versionSearch: "MSIE" // note: no comma
} // note: no comma
];
The [] define an array literal, and all of its elements are object literals. Each object literal is enclosed in curly braces {} and contains a few properties (name: value,). Note that a comma between the objects and between the properties is required, but that the last comma is always forbidden.
Properties
Every object in the dataBrowser array can contain the following properties:
string and subString properties. These say: "search for subString in string". If the subString is found, the browser is identified.
a prop property. It says "see if prop is supported". If it is, the browser is identified.
an identity string. This string becomes the value of BrowserDetect.browser.
a versionSearch string. This is for searching for the version number (see below). If this property is absent, the identity string is used instead.
Every object must contain either 1 or 2 (never both!), must contain 3 and may contain 4.