[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 237
  • Last Modified:

Netscape40+ or IE50+

I need to implement this detection algorithm:

if(IE50+) then
load "page1.htm"
else if (NS40+) then
load "page2.htm"
else
load "page3.htm"
0
aulrich
Asked:
aulrich
  • 3
  • 2
1 Solution
 
TTomCommented:
Aulrich:

Here is Netscape's all purpose JavaScript browser sniffer.  It's pretty well explained at http://developer.netscape.com/docs/examples/index.html?content=javascript.html

Clearly, you do not need all it's functionality, just the sections pertaining to IE5 and NS4, but you can probably leave them in.  Once you have that, the rest is simple.

// Ultimate client-side JavaScript client sniff.

// (C) Netscape Communications 1999.  Permission
granted to reuse and distribute.
// Revised 17 May 99 to add is_nav5up and
is_ie5up (see below).

// Everything you always wanted to know about
your JavaScript client
// but were afraid to ask. Creates "is_"
variables indicating:
// (1) browser vendor:
//     is_nav, is_ie, is_opera
// (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_nav5, is_nav5up, is_ie3, is_ie4, is_ie4up
// (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_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
http://www.it97.de/JavaScript/JS_tutorial/bstat/navobj.html
and
//
http://www.it97.de/JavaScript/JS_tutorial/bstat/Browseraol.html

// for detailed lists of userAgent strings.
//
// Note: you don't want your Nav4 or IE4 code to
"turn off" or
// stop working when Nav5 and IE5 (or later) are
released, so
// in conditional code forks, use is_nav4up
("Nav4 or greater")
// and is_ie4up ("IE4 or greater") instead of
is_nav4 or is_ie4
// 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));
    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(";nav") != -1) ||
                          (agt.indexOf("; nav")
!= -1)) );
    var is_nav5 = (is_nav && (is_major == 5));
    var is_nav5up = (is_nav && (is_major >= 5));

    var is_ie   = (agt.indexOf("msie") != -1);
    var is_ie3  = (is_ie && (is_major < 4));
    var is_ie4  = (is_ie && (is_major == 4) &&
(agt.indexOf("msie 5.0")==-1) );
    var is_ie4up  = (is_ie  && (is_major >= 4));

    var is_ie5  = (is_ie && (is_major == 4) &&
(agt.indexOf("msie 5.0")!=-1) );
    var is_ie5up  = (is_ie  && !is_ie3 &&
!is_ie4);

    // 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("aol") != -1);
    var is_aol3  = (is_aol && is_ie3);
    var is_aol4  = (is_aol && is_ie4);

    var is_opera = (agt.indexOf("opera") != -1);

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

    // *** JAVASCRIPT VERSION CHECK ***
    var is_js;
    if (is_nav2 || is_ie3) is_js = 1.0
    else if (is_nav3 || 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_nav5) is_js = 1.4
    // 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_nav && (is_major > 5)) is_js =
1.4
    else if (is_ie && (is_major > 5)) 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("win")!=-1) || (agt.indexOf("16bit")!=-1) );
    // NOTE: On Opera 3.0, the userAgent string includes "Windows 95/NT4" on all
    //        Win32, so you can't distinguish between Win95 and WinNT.
    var is_win95 = ((agt.indexOf("win95")!=-1) || (agt.indexOf("windows 95")!=-1));

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

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

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

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

    var is_mac    = (agt.indexOf("mac")!=-1);
    var is_mac68k = (is_mac && ((agt.indexOf("68k")!=-1) ||
                               (agt.indexOf("68000")!=-1)));
    var is_macppc = (is_mac && ((agt.indexOf("ppc")!=-1) ||
                                (agt.indexOf("powerpc")!=-1)));

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

New code starts here:

if (is_ie5up) {
   window.location = "page1.htm"
   } elseif (is_nav4up) {
   window.location = "page2.htm"
   } else {
   window.location = "page3.htm"
}

Should do it for you.

Tom
   
0
 
boycey19Commented:
Thats hell alot of code for such a small task. This is some code that I use.

browser_name = navigator.appName;
version = navigator.appVersion;

if(browser_name == "Microsoft Internet Explorer" && version >= 5)
  location.href= "page1.html";

else if(browser_name == "Netscape" && version >= 4)
  location.href= "page2.html";

else
  location.href= "page3.html";

Boycey
0
 
aulrichAuthor Commented:
Thanks boycey19,

your code was perfect!
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
TTomCommented:
Boycey:

I agree.  99% of the code was unnecessary for this particular purpose.  What it "boiled down" to was approximately what you provided.

In this case, more is not better (but I figured anyone who is doing browser sniffing should probably have the most complete version available).  Not that hard to remove the useless parts.

Tom
0
 
aulrichAuthor Commented:
Thanks for your input Tom; I guess all that unnecessary code just scared me off.

Thanks again
aulrich
0
 
TTomCommented:
Not a problem!

I think I knew that when I posted it.  I thought about trimming it down, but I decided you (or others) might find it useful at some point.

Glad you got what you wanted/needed.

Happy Holidays,

Tom
0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now