5.1 Detecting the Browser Brand

NN 2, IE 3

5.1.1 Problem

You want script execution to branch one way for Netscape Navigator users and another for Internet Explorer users.

5.1.2 Solution

Use the navigator.appName property to find out which brand the browser purports to be. The following statement sets global Boolean variables for browser brands:

var isNav = (navigator.appName =  = "Netscape");
var isIE = (navigator.appName =  = "Microsoft Internet Explorer");

5.1.3 Discussion

The navigator.appName property returns a string that the browser maker determines. Netscape Navigator and Mozilla always return the string "Netscape", while Internet Explorer returns "Microsoft Internet Explorer". These strings and the equivalency operator are case-sensitive.

You will also encounter some interesting aberrations to this scheme once you roam from the IE and NN spheres. The Opera browser, for example, reports that its appName is "Microsoft Internet Explorer", "Netscape", or "Opera", depending on how the user sets the preferences. Settings for IE and NN force the browser to react to script syntax and objects along the lines of the selected browser (at least for simple tasks). If you want to find out for sure whether the browser is Opera, you must dig into the navigator.userAgent property, which contains more information about the browser. Here is the default value for the navigator.userAgent property from Opera 6:

Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.03 [en]

The Opera-ness of this information is the string "Opera" buried within that string. Rather than look for the string at a particular location within the string (which has changed over time), you can simply test whether "Opera" is contained by navigator.userAgent:

var isOpera =   (navigator.userAgent.indexOf("Opera") != -1);

With respect to Internet Explorer, you should be aware that substantial differences exist between the Windows and Macintosh versions. Thus, you may need operating-system detection as well (covered in Recipe 5.5).

5.1.4 See Also

Recipe 5.2 through Recipe 5.4 for more granular browser version sniffing; Recipe 5.5 for operating-system detection.