Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

How do I determine which browser is being used? 2

Status
Not open for further replies.

JustKIDn

MIS
May 6, 2002
386
0
0
US
A long time ago I found a script and modified it for my site.

Then I tried using Mozilla and none of the Javascripts work.

I think part of the problem is this line;

if (navigator.appName == "Netscape") {

But I've tried replacing Netscape with Mozilla and that doesn't work either.

And then there's Opera.

How do I make my scripts work with any browser?

tgus

____________________________________________________
A father's calling is eternal, and its importance transcends time.
 
hi tgus,

search for "javascript browser detect" on google.com.

======================================

if (!succeed) try();
-jeff
 
Hi,
I use a combination of ASP and JavaScript to deal with
browser types:

The ASP (at the very top of the asp page,before anything else, even the <html> tag)
Code:
<% strUA = Request.ServerVariables(&quot;HTTP_USER_AGENT&quot;) %>

Then, in my JavaScript I check for IE :
Code:
<SCRIPT LANGUAGE=&quot;JavaScript&quot;>
 var brws = &quot;<%=StrUA %>&quot;
 var brtype = brws.indexOf(&quot;IE&quot;)
If (brtype > 0) {
 //  Put the IE stuff here
}
 else {
   // Netscape here...
}

.....
</SCRIPT>

This snippet will handle most cases just using Netscape code for anything but IE - Not perfect, but it has worked for me so far with users having IE, Netscape, Mozilla, Opera, etc..

hth,
[profile]
 
if you have netscape navigator this should be easy

make a new html file with in it this

<html>
<head>
<script language=&quot;javascript&quot;>
document.write(navigator.appName)
</head>
</html>
it should display the exact name you must use Don't take life to serious,
it isn't permanent, -LordSlayer

 
Code:
//<!--
// Ultimate client-side JavaScript client sniff. Version 3.03
// (C) Netscape Communications 1999-2001.  Permission granted to reuse and distribute.
// Revised 17 May 99 to add is_nav5up and is_ie5up (see below).
// Revised 20 Dec 00 to add is_gecko and change is_nav5up to is_nav6up
//                      also added support for IE5.5 Opera4&5 HotJava3 AOLTV
// Revised 22 Feb 01 to correct Javascript Detection for IE 5.x, Opera 4, 
//                      correct Opera 5 detection
//                      add support for winME and win2k
//                      synch with browser-type-oo.js
// Revised 26 Mar 01 to correct Opera detection
// Revised 02 Oct 01 to add IE6 detection

// Everything you always wanted to know about your JavaScript client
// but were afraid to ask. Creates &quot;is_&quot; variables indicating:
// (1) browser vendor:
//     is_nav, is_ie, is_opera, is_hotjava, is_webtv, is_TVNavigator, is_AOLTV
// (2) browser version number:
//     is_major (integer indicating major version number: 2, 3, 4 ...)
//     is_minor (float   indicating full  version number: 2.02, 3.01, 4.04 ...)
// (3) browser vendor AND major version number
//     is_nav2, is_nav3, is_nav4, is_nav4up, is_nav6, is_nav6up, is_gecko, is_ie3,
//     is_ie4, is_ie4up, is_ie5, is_ie5up, is_ie5_5, is_ie5_5up, is_ie6, is_ie6up, is_hotjava3, is_hotjava3up,
//     is_opera2, is_opera3, is_opera4, is_opera5, is_opera5up
// (4) JavaScript version number:
//     is_js (float indicating full JavaScript version number: 1, 1.1, 1.2 ...)
// (5) OS platform and version:
//     is_win, is_win16, is_win32, is_win31, is_win95, is_winnt, is_win98, is_winme, is_win2k
//     is_os2
//     is_mac, is_mac68k, is_macppc
//     is_unix
//     is_sun, is_sun4, is_sun5, is_suni86
//     is_irix, is_irix5, is_irix6
//     is_hpux, is_hpux9, is_hpux10
//     is_aix, is_aix1, is_aix2, is_aix3, is_aix4
//     is_linux, is_sco, is_unixware, is_mpras, is_reliant
//     is_dec, is_sinix, is_freebsd, is_bsd
//     is_vms
//
// See [URL unfurl="true"]http://www.it97.de/JavaScript/JS_tutorial/bstat/navobj.html[/URL] and
// [URL unfurl="true"]http://www.it97.de/JavaScript/JS_tutorial/bstat/Browseraol.html[/URL]
// for detailed lists of userAgent strings.
//
// Note: you don't want your Nav4 or IE4 code to &quot;turn off&quot; or
// stop working when new versions of browsers are released, so
// in conditional code forks, use is_ie5up (&quot;IE 5.0 or greater&quot;) 
// is_opera5up (&quot;Opera 5.0 or greater&quot;) instead of is_ie5 or is_opera5
// to check version in code which you want to work on future
// versions.

    // convert all characters to lowercase to simplify testing
    var agt=navigator.userAgent.toLowerCase();

    // *** BROWSER VERSION ***
    // Note: On IE5, these return 4, so use is_ie5up to detect IE5.
    var is_major = parseInt(navigator.appVersion);
    var is_minor = parseFloat(navigator.appVersion);

    // Note: Opera and WebTV spoof Navigator.  We do strict client detection.
    // If you want to allow spoofing, take out the tests for opera and webtv.
    var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
                && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
                && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
    var is_nav2 = (is_nav && (is_major == 2));
    var is_nav3 = (is_nav && (is_major == 3));
    var is_nav4 = (is_nav && (is_major == 4));
    var is_nav4up = (is_nav && (is_major >= 4));
    var is_navonly      = (is_nav && ((agt.indexOf(&quot;;nav&quot;) != -1) ||
                          (agt.indexOf(&quot;; nav&quot;) != -1)) );
    var is_nav6 = (is_nav && (is_major == 5));
    var is_nav6up = (is_nav && (is_major >= 5));
    var is_gecko = (agt.indexOf('gecko') != -1);


    var is_ie     = ((agt.indexOf(&quot;msie&quot;) != -1) && (agt.indexOf(&quot;opera&quot;) == -1));
    var is_ie3    = (is_ie && (is_major < 4));
    var is_ie4    = (is_ie && (is_major == 4) && (agt.indexOf(&quot;msie 4&quot;)!=-1) );
    var is_ie4up  = (is_ie && (is_major >= 4));
    var is_ie5    = (is_ie && (is_major == 4) && (agt.indexOf(&quot;msie 5.0&quot;)!=-1) );
    var is_ie5_5  = (is_ie && (is_major == 4) && (agt.indexOf(&quot;msie 5.5&quot;) !=-1));
    var is_ie5up  = (is_ie && !is_ie3 && !is_ie4);
    var is_ie5_5up =(is_ie && !is_ie3 && !is_ie4 && !is_ie5);
    var is_ie6    = (is_ie && (is_major == 4) && (agt.indexOf(&quot;msie 6.&quot;)!=-1) );
    var is_ie6up  = (is_ie && !is_ie3 && !is_ie4 && !is_ie5 && !is_ie5_5);

    // KNOWN BUG: On AOL4, returns false if IE3 is embedded browser
    // or if this is the first browser window opened.  Thus the
    // variables is_aol, is_aol3, and is_aol4 aren't 100% reliable.
    var is_aol   = (agt.indexOf(&quot;aol&quot;) != -1);
    var is_aol3  = (is_aol && is_ie3);
    var is_aol4  = (is_aol && is_ie4);
    var is_aol5  = (agt.indexOf(&quot;aol 5&quot;) != -1);
    var is_aol6  = (agt.indexOf(&quot;aol 6&quot;) != -1);

    var is_opera = (agt.indexOf(&quot;opera&quot;) != -1);
    var is_opera2 = (agt.indexOf(&quot;opera 2&quot;) != -1 || agt.indexOf(&quot;opera/2&quot;) != -1);
    var is_opera3 = (agt.indexOf(&quot;opera 3&quot;) != -1 || agt.indexOf(&quot;opera/3&quot;) != -1);
    var is_opera4 = (agt.indexOf(&quot;opera 4&quot;) != -1 || agt.indexOf(&quot;opera/4&quot;) != -1);
    var is_opera5 = (agt.indexOf(&quot;opera 5&quot;) != -1 || agt.indexOf(&quot;opera/5&quot;) != -1);
    var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4);

    var is_webtv = (agt.indexOf(&quot;webtv&quot;) != -1); 

    var is_TVNavigator = ((agt.indexOf(&quot;navio&quot;) != -1) || (agt.indexOf(&quot;navio_aoltv&quot;) != -1)); 
    var is_AOLTV = is_TVNavigator;

    var is_hotjava = (agt.indexOf(&quot;hotjava&quot;) != -1);
    var is_hotjava3 = (is_hotjava && (is_major == 3));
    var is_hotjava3up = (is_hotjava && (is_major >= 3));

    // *** JAVASCRIPT VERSION CHECK ***
    var is_js;
    if (is_nav2 || is_ie3) is_js = 1.0;
    else if (is_nav3) is_js = 1.1;
    else if (is_opera5up) is_js = 1.3;
    else if (is_opera) is_js = 1.1;
    else if ((is_nav4 && (is_minor <= 4.05)) || is_ie4) is_js = 1.2;
    else if ((is_nav4 && (is_minor > 4.05)) || is_ie5) is_js = 1.3;
    else if (is_hotjava3up) is_js = 1.4;
    else if (is_nav6 || is_gecko) is_js = 1.5;
    // NOTE: In the future, update this code when newer versions of JS
    // are released. For now, we try to provide some upward compatibility
    // so that future versions of Nav and IE will show they are at
    // *least* JS 1.x capable. Always check for JS version compatibility
    // with > or >=.
    else if (is_nav6up) is_js = 1.5;
    // NOTE: ie5up on mac is 1.4
    else if (is_ie5up) is_js = 1.3

    // HACK: no idea for other browsers; always check for JS version with > or >=
    else is_js = 0.0;

    // *** PLATFORM ***
    var is_win   = ( (agt.indexOf(&quot;win&quot;)!=-1) || (agt.indexOf(&quot;16bit&quot;)!=-1) );
    // NOTE: On Opera 3.0, the userAgent string includes &quot;Windows 95/NT4&quot; on all
    //        Win32, so you can't distinguish between Win95 and WinNT.
    var is_win95 = ((agt.indexOf(&quot;win95&quot;)!=-1) || (agt.indexOf(&quot;windows 95&quot;)!=-1));

    // is this a 16 bit compiled version?
    var is_win16 = ((agt.indexOf(&quot;win16&quot;)!=-1) || 
               (agt.indexOf(&quot;16bit&quot;)!=-1) || (agt.indexOf(&quot;windows 3.1&quot;)!=-1) || 
               (agt.indexOf(&quot;windows 16-bit&quot;)!=-1) );  

    var is_win31 = ((agt.indexOf(&quot;windows 3.1&quot;)!=-1) || (agt.indexOf(&quot;win16&quot;)!=-1) ||
                    (agt.indexOf(&quot;windows 16-bit&quot;)!=-1));

    var is_winme = ((agt.indexOf(&quot;win 9x 4.90&quot;)!=-1));
    var is_win2k = ((agt.indexOf(&quot;windows nt 5.0&quot;)!=-1));

    // NOTE: Reliable detection of Win98 may not be possible. It appears that:
    //       - On Nav 4.x and before you'll get plain &quot;Windows&quot; in userAgent.
    //       - On Mercury client, the 32-bit version will return &quot;Win98&quot;, but
    //         the 16-bit version running on Win98 will still return &quot;Win95&quot;.
    var is_win98 = ((agt.indexOf(&quot;win98&quot;)!=-1) || (agt.indexOf(&quot;windows 98&quot;)!=-1));
    var is_winnt = ((agt.indexOf(&quot;winnt&quot;)!=-1) || (agt.indexOf(&quot;windows nt&quot;)!=-1));
    var is_win32 = (is_win95 || is_winnt || is_win98 || 
                    ((is_major >= 4) && (navigator.platform == &quot;Win32&quot;)) ||
                    (agt.indexOf(&quot;win32&quot;)!=-1) || (agt.indexOf(&quot;32bit&quot;)!=-1));

    var is_os2   = ((agt.indexOf(&quot;os/2&quot;)!=-1) || 
                    (navigator.appVersion.indexOf(&quot;OS/2&quot;)!=-1) ||   
                    (agt.indexOf(&quot;ibm-webexplorer&quot;)!=-1));

    var is_mac    = (agt.indexOf(&quot;mac&quot;)!=-1);
    // hack ie5 js version for mac
    if (is_mac && is_ie5up) is_js = 1.4;
    var is_mac68k = (is_mac && ((agt.indexOf(&quot;68k&quot;)!=-1) || 
                               (agt.indexOf(&quot;68000&quot;)!=-1)));
    var is_macppc = (is_mac && ((agt.indexOf(&quot;ppc&quot;)!=-1) || 
                                (agt.indexOf(&quot;powerpc&quot;)!=-1)));

    var is_sun   = (agt.indexOf(&quot;sunos&quot;)!=-1);
    var is_sun4  = (agt.indexOf(&quot;sunos 4&quot;)!=-1);
    var is_sun5  = (agt.indexOf(&quot;sunos 5&quot;)!=-1);
    var is_suni86= (is_sun && (agt.indexOf(&quot;i86&quot;)!=-1));
    var is_irix  = (agt.indexOf(&quot;irix&quot;) !=-1);    // SGI
    var is_irix5 = (agt.indexOf(&quot;irix 5&quot;) !=-1);
    var is_irix6 = ((agt.indexOf(&quot;irix 6&quot;) !=-1) || (agt.indexOf(&quot;irix6&quot;) !=-1));
    var is_hpux  = (agt.indexOf(&quot;hp-ux&quot;)!=-1);
    var is_hpux9 = (is_hpux && (agt.indexOf(&quot;09.&quot;)!=-1));
    var is_hpux10= (is_hpux && (agt.indexOf(&quot;10.&quot;)!=-1));
    var is_aix   = (agt.indexOf(&quot;aix&quot;) !=-1);      // IBM
    var is_aix1  = (agt.indexOf(&quot;aix 1&quot;) !=-1);    
    var is_aix2  = (agt.indexOf(&quot;aix 2&quot;) !=-1);    
    var is_aix3  = (agt.indexOf(&quot;aix 3&quot;) !=-1);    
    var is_aix4  = (agt.indexOf(&quot;aix 4&quot;) !=-1);    
    var is_linux = (agt.indexOf(&quot;inux&quot;)!=-1);
    var is_sco   = (agt.indexOf(&quot;sco&quot;)!=-1) || (agt.indexOf(&quot;unix_sv&quot;)!=-1);
    var is_unixware = (agt.indexOf(&quot;unix_system_v&quot;)!=-1); 
    var is_mpras    = (agt.indexOf(&quot;ncr&quot;)!=-1); 
    var is_reliant  = (agt.indexOf(&quot;reliantunix&quot;)!=-1);
    var is_dec   = ((agt.indexOf(&quot;dec&quot;)!=-1) || (agt.indexOf(&quot;osf1&quot;)!=-1) || 
           (agt.indexOf(&quot;dec_alpha&quot;)!=-1) || (agt.indexOf(&quot;alphaserver&quot;)!=-1) || 
           (agt.indexOf(&quot;ultrix&quot;)!=-1) || (agt.indexOf(&quot;alphastation&quot;)!=-1)); 
    var is_sinix = (agt.indexOf(&quot;sinix&quot;)!=-1);
    var is_freebsd = (agt.indexOf(&quot;freebsd&quot;)!=-1);
    var is_bsd = (agt.indexOf(&quot;bsd&quot;)!=-1);
    var is_unix  = ((agt.indexOf(&quot;x11&quot;)!=-1) || is_sun || is_irix || is_hpux || 
                 is_sco ||is_unixware || is_mpras || is_reliant || 
                 is_dec || is_sinix || is_aix || is_linux || is_bsd || is_freebsd);

    var is_vms   = ((agt.indexOf(&quot;vax&quot;)!=-1) || (agt.indexOf(&quot;openvms&quot;)!=-1));

//--> end hide JavaScript
---------------------------------------
wmail.jpg


someone knowledge ends where
someone else knowledge starts
 
too big too bloated. Sorry guys. The best way to do browser checking is to see what javascript option you want to use and then use it. I personally use this to know what browser DOM I need to use :

var ie4 = (document.all); // ie 4+
var ns4 = (document.layers); // netscape 4
var dom = (document.getElementById); // dom 1 compliant browsers

anytime I need to use a javascript option and I am unsure if that method or property exists in that browser implementation I check for it before using it :

if (document.getElementsByTagName)
{
var t = document.getElementByTagName(&quot;SELECT&quot;)
}
else if (ie4)
{
var t = document.all.tags[&quot;select&quot;];
}
else // ns4 doesn't support any kind of similar thing
{
var t = new Array(); // feed empty array
}

alert(t.length)

If you had checked for IE only or NS only you would get some problems the day a feature gets dropped by a browser (for example Netscape 6 doesn't use document.layers but is still a netscape product if you checked for netscape and not for document.layers you would have errors left right and center on your page).

The best thing to do is upgrade the older non standard DOM implementations.

if (!document.getElementById && ie4)
{
document.getElementById = function(id)
{
return document.all[id]
}
}
else if (!document.getElementById && ns4)
{
document.getElementById = function(id)
{
// this is over simplified. NS4 requires you to recurse all divs
return document.layers[id]
}
}

Then in your code you would simply need to always use the same standard compliant way you know will work with all browsers to come (since it is a standard set by the w3c.org).

<div id=myDiv style=&quot;position:absolute;left:0;top:0;&quot;>Hello there</div>

<script>
alert(document.getElementById(&quot;myDiv&quot;)) // should work in most browsers NS4, IE4+ as well as many standard compliant browsers like NS6, Mozilla and most likely opera.
</script>

I hope this clears things out! ;) Gary Haran
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top