javascript browser detection

Upload: andrei-bogdan

Post on 04-Jun-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 javascript browser detection

    1/5

    /*Script Name: Full Featured Javascript Browser/OS detectionAuthors: Harald Hope, Tapio Markula, Websites: http://techpatterns.com/http://www.nic.fi/~tapio1/Teaching/index1.php3Script Source URI: http://techpatterns.com/downloads/javascript_browser_detection.phpVersion 4.2.4Copyright (C) 29 June 2007

    This program is free software; you can redistribute it and/or modify it underthe terms of the GNU General Public License as published by the Free SoftwareFoundation; either version 3 of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful, but WITHOUTANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESSFOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

    Get the full text of the GPL here: http://www.gnu.org/licenses/gpl.txt

    Coding conventions:http://cvs.sourceforge.net/viewcvs.py/phpbb/phpBB2/docs/codingstandards.htm?rev=1.3*/

    /*************************************************************Full version, use it if you are pushing css to its functional limits, and/or areusingspecialized javascript.

    Remember, always use method or object testing as your first choice, for example,if ( dom ) { statement; };

    This browser detection includes all possibilities I think for most browsers.Let me know if you find an error or a failure to properly detect, or if thereis a relevant browser that has special needs for detection at our tech forum:http://techpatterns.com/forums/forum-11.html

    The main script is separated from the initial netscape 4 detection due to certain bugs innetscape 4 when it comes to unknown things like d.getElementById. The variable declarationsof course are made first to make sure that all the variables are global throughthe page,otherwise a javascript error will occur because you are trying to use an undeclared variable.

    We test for both browser type (ie, op, or moz/netscape > 6) and version number,then placethe version number into a variable which can be tested for < or > values, such as

    if (moz && nu> 1.1){....statement....;}This seems quite reliable, especially for Opera and Mozilla, where there is no othereasy way to get the actual version number.

    For more in depth discussion of css and browser issues go to:http://www.nic.fi/~tapio1/Teaching/DynamicMenusb.php#detectionshttp://www.nic.fi/~tapio1/Teaching/FAQ.php3

    ***************************************************************/

  • 8/14/2019 javascript browser detection

    2/5

    //initialization, browser, os detectionvar d, dom, nu='', brow='', ie, ie4, ie5, ie5x, ie6, ie7;var ns4, moz, moz_rv_sub, release_date='', moz_brow, moz_brow_nu='', moz_brow_nu

    _sub='', rv_full='';var mac, win, old, lin, ie5mac, ie5xwin, konq, saf, op, op4, op5, op6, op7;

    d=document;n=navigator;nav=n.appVersion;nan=n.appName;nua=n.userAgent;old=(nav.substring(0,1)

  • 8/14/2019 javascript browser detection

    3/5

    pattern = /[(); \n]/;// moz type array, add to this if you need tomoz_types = new Array( 'Firebird', 'Phoenix', 'Firefox', 'Iceweasel', 'G

    aleon', 'K-Meleon', 'Camino', 'Epiphany', 'Netscape6', 'Netscape', 'MultiZilla','Gecko Debian', 'rv' );

    rv_pos = nua.indexOf( 'rv' );// find 'rv' position in nua stringrv_full = nua.substr( rv_pos + 3, 6 );// cut out maximum size it can be,

    eg: 1.8a2, 1.0.0 etc// search for occurance of any of characters in pattern, if found get po

    sition of that characterrv_slice = ( rv_full.search( pattern ) != -1 ) ? rv_full.search( pattern

    ) : '';//check to make sure there was a result, if not do nothing// otherwise slice out the part that you want if there is a slice positi

    on( rv_slice ) ? rv_full = rv_full.substr( 0, rv_slice ) : '';// this is the working id number, 3 digits, you'd use this for// number comparison, like if nu >= 1.3 do somethingnu = rv_full.substr( 0, 3 );for (i=0; i < moz_types.length; i++){

    if ( nua.indexOf( moz_types[i]) !=-1 ){

    moz_brow = moz_types[i];

    break;}}if ( moz_brow )// if it was found in the array{

    str_pos=nua.indexOf(moz_brow);// extract string positionmoz_brow_nu = nua.substr( (str_pos + moz_brow.length + 1 ) ,3);/

    / slice out working number, 3 digit// if you got it, use it, else use numoz_brow_nu = ( isNaN( moz_brow_nu ) ) ? moz_brow_nu = nu: moz_b

    row_nu;moz_brow_nu_sub = nua.substr( (str_pos + moz_brow.length + 1 ),

    8);

    // this makes sure that it's only the id numbersub_nu_slice = ( moz_brow_nu_sub.search( pattern ) != -1 ) ? moz_brow_nu_sub.search( pattern ) : '';

    //check to make sure there was a result, if not do nothing( sub_nu_slice ) ? moz_brow_nu_sub = moz_brow_nu_sub.substr( 0,

    sub_nu_slice ) : '';}if ( moz_brow == 'Netscape6' ){

    moz_brow = 'Netscape';}else if ( moz_brow == 'rv' || moz_brow == '' )// default value if no oth

    er gecko name fit

    {moz_brow = 'Mozilla';

    }if ( !moz_brow_nu )// use rv number if nothing else is available{

    moz_brow_nu = nu;moz_brow_nu_sub = nu;

    }if (n.productSub){

  • 8/14/2019 javascript browser detection

    4/5

    release_date = n.productSub;}

    }else if (ie){

    str_pos=nua.indexOf('MSIE');nu=nua.substr((str_pos+5),3);brow = 'Microsoft Internet Explorer';

    }// default to navigator app nameelse{

    brow = nan;}op5=(op&&(nu.substring(0,1)==5));op6=(op&&(nu.substring(0,1)==6));op7=(op&&(nu.substring(0,1)==7));op8=(op&&(nu.substring(0,1)==8));op9=(op&&(nu.substring(0,1)==9));ie4=(ie&&!dom);ie5=(ie&&(nu.substring(0,1)==5));ie6=(ie&&(nu.substring(0,1)==6));ie7=(ie&&(nu.substring(0,1)==7));// default to get number from navigator app version.

    if(!nu){nu = nav.substring(0,1);

    }/*ie5x tests only for functionavlity. dom or ie5x would be default settings.Opera will register true in this test if set to identify as IE 5*/ie5x=(d.all&&dom);ie5mac=(mac&&ie5);ie5xwin=(win&&ie5x);

    /********************************************************here is a sample use of the browser detector, it would load a browser specific stylesheet

    for certain unsupported or improperly supported mac ie 5 css styles. The depth variableis used so that the javascript library file can be used from anywhere in the website, you simplyinsert the depth of the file like this,...Browser information Page

  • 8/14/2019 javascript browser detection

    5/5

    d.write('');

    }else if ( document.layers ){

    d.write('');

    }else if ( ie4 ){

    d.write('');

    }else if ( moz && ( nu < 1 ) ){

    d.write('');

    }else {

    d.write('');

    }}********************************************************/