Browser Check

Discussion in 'Javascript' started by McKirahan, Feb 25, 2004.

  1. McKirahan

    McKirahan Guest

    Is this a very good browser check?

    <html>
    <head>
    <title>wB.htm</title>
    <script type="text/javascript">
    var adBtype = "??";
    function wB() {
    if (document.getElementById && !document.all) {
    adBtype = "NS6+";
    } else if (document.getElementById && document.all) {
    adBtype = "IE5+";
    } else if (document.all) {
    adBtype = "IE4";
    } else if (document.layers) {
    adBtype = "NS4";
    }
    alert(adBtype);
    }
    </script>
    </head>
    <body onload="wB()">
    <body>
    </html>

    Opera 6.01 returns "IE5+"; don't know about others...
    McKirahan, Feb 25, 2004
    #1
    1. Advertising

  2. "McKirahan" <> writes:

    > Is this a very good browser check?


    No. I can say that without reading, because browser checks are almost
    invariably not good, no matter how efficient they are :).

    (Remember DOCTYPE, it is required by HTML)

    > var adBtype = "??";
    > function wB() {
    > if (document.getElementById && !document.all) {
    > adBtype = "NS6+";


    Or Opera 6 or ....

    > } else if (document.getElementById && document.all) {
    > adBtype = "IE5+";


    Or Opera 6 (in IE mode) or Opera 7 or ...

    > } else if (document.all) {
    > adBtype = "IE4";


    Or WebTV or ....

    > } else if (document.layers) {
    > adBtype = "NS4";


    Or OmniWeb or ...

    > Opera 6.01 returns "IE5+"; don't know about others...


    Not knowing about others is *the* problem with browser detection.
    Optimistically it is hard work to become familiar with all browsers,
    realistically, it is quite impossible. You will invariably miss some
    browsers that are in actual use, and will most likely badly
    misrepresent future browsers.

    The way to make scripts usefull across as many browsers as possible
    are:
    1) Use standards! It gives you the best chance of forward compatability.
    2) Use object/feature detection, not browser detection, to make fallbacks
    for non-standard-compliant browsers.

    Object detection coulde be:

    var elem;
    if (document.getElementById) {
    elem = document.getElementById(id);
    } else if (document.all) {
    elem = document.all[id];
    } else if (document.layers) {
    elem = document.layers[id];
    } else {
    elem = null;
    }

    Before using a standard feature that some browsers are known to be
    incompatible with, you test for its existence. If it doesn't exist,
    you test for the existence of some other feature that might (or might
    not) be used instead. Notice that the above code doesn't care whether
    it is IE 5+ or NS 6+ or whatever. It is not perfect code! There are
    cases where it fails too, which further testing could fix. And some
    that it can't (some browsers are just broken, or doesn't have
    Javascript enabled).

    It is important to realize that old browsers that nobody uses will not
    become more used in the future, but future browsers will. That makes
    forward compatability more important than backwards compatability.
    Detecting specific versions of known browsers will necessarily not
    work for future versions.


    /L
    --
    Lasse Reichstein Nielsen -
    DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
    'Faith without judgement merely degrades the spirit divine.'
    Lasse Reichstein Nielsen, Feb 25, 2004
    #2
    1. Advertising

  3. McKirahan

    Mick White Guest

    McKirahan wrote:


    > <script type="text/javascript">
    > var adBtype = "??";
    > function wB() {
    > if (document.getElementById && !document.all) {
    > adBtype = "NS6+";
    > } else if (document.getElementById && document.all) {
    > adBtype = "IE5+";
    > } else if (document.all) {
    > adBtype = "IE4";
    > } else if (document.layers) {
    > adBtype = "NS4";
    > }
    > alert(adBtype);
    > }
    ></script>


    There's no escape for the function:


    function wB() {
    if (document.getElementById && !document.all) {
    adBtype = "NS6+";return;
    }
    if (document.getElementById && document.all) {
    adBtype = "IE5+";return;
    }
    if (document.all) {
    adBtype = "IE4";return;
    }
    if (document.layers) {
    adBtype = "NS4";return;
    }
    adBtype= "unknown to this programmer";
    }
    Mick
    Mick White, Feb 26, 2004
    #3
  4. McKirahan

    McKirahan Guest

    "Mick White" <> wrote in message
    news:0Fb%b.92008$%...
    > McKirahan wrote:
    >
    >
    > > <script type="text/javascript">
    > > var adBtype = "??";
    > > function wB() {
    > > if (document.getElementById && !document.all) {
    > > adBtype = "NS6+";
    > > } else if (document.getElementById && document.all) {
    > > adBtype = "IE5+";
    > > } else if (document.all) {
    > > adBtype = "IE4";
    > > } else if (document.layers) {
    > > adBtype = "NS4";
    > > }
    > > alert(adBtype);
    > > }
    > ></script>

    >
    > There's no escape for the function:
    >
    >
    > function wB() {
    > if (document.getElementById && !document.all) {
    > adBtype = "NS6+";return;
    > }
    > if (document.getElementById && document.all) {
    > adBtype = "IE5+";return;
    > }
    > if (document.all) {
    > adBtype = "IE4";return;
    > }
    > if (document.layers) {
    > adBtype = "NS4";return;
    > }
    > adBtype= "unknown to this programmer";
    > }
    > Mick


    Actually I modified one I found; it actually was:

    function wB() {
    if (document.getElementById && !document.all) {
    adBtype = "NS6+";
    return;
    } else if (document.getElementById && document.all) {
    adBtype = "IE5+";
    return;
    } else if (document.all) {
    adBtype = "IE4";
    return;
    } else if (document.layers) {
    adBtype = "NS4";
    return;
    }
    }
    McKirahan, Feb 26, 2004
    #4
  5. McKirahan

    kaeli Guest

    kaeli, Feb 26, 2004
    #5
  6. McKirahan

    Mick White Guest

    McKirahan wrote:


    >
    > Actually I modified one I found; it actually was:
    >
    > function wB() {
    > if (document.getElementById && !document.all) {
    > adBtype = "NS6+";
    > return;
    > } else if (document.getElementById && document.all) {
    > adBtype = "IE5+";
    > return;
    > } else if (document.all) {
    > adBtype = "IE4";
    > return;
    > } else if (document.layers) {
    > adBtype = "NS4";
    > return;
    > }
    > }
    >


    What if all the Booleans are false? You need to declare a global variable:
    var adBtype="Unknown" // A suggestion.
    But read the other comments, there are probably hundreds of different
    browsers out there, some of which obfuscate their headers. IOW your
    "adBtype" is just a guess.
    Mick
    Mick White, Feb 26, 2004
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Davisro
    Replies:
    1
    Views:
    682
    Michael D. Ober
    Jun 14, 2004
  2. mit
    Replies:
    1
    Views:
    780
    Ramu Pulipati
    Jan 25, 2006
  3. kris
    Replies:
    0
    Views:
    499
  4. kris
    Replies:
    0
    Views:
    460
  5. kris
    Replies:
    1
    Views:
    5,166
Loading...

Share This Page