Please send questions to st10@humboldt.edu .

Random projections, Session 8, 9-14-06

*   since JavaScript is not implemented with the same features in
    different browsers,

    it is useful for a page to be able to see what kind of browser 
    it is dealing with, and to act accordingly

*   The navigator object created for each page when it is loaded
    into a browser has properties containing such information.

    (for example, see http://www.w3schools.com/htmldom/dom_obj_navigator.asp)

    *   appName - name of the browser
    *   appVersion - version of that browser (and more!)

    *   js_nav1.html: demos these, and a little table HTML
        (google "Table Sampler" for more table HTML examples...)

*   A few approaches for dealing with browser incompatibilities
    in JavaScript..

    *   (Ch. 20, JavaScript: the Definitive Guide, 4th edition)

    *   (keep in mind - some of these are more advisable than
        others, depending on YOUR situation)

    *   least-common-denominator approach - just avoid using
        features known to have incompatibility issues

        *  could just NOT use such features;

        *   could set up your own properties for non-standard
            properties...

            myObj.newProp = 27;

    *   defensive coding - you write JavaScript that contains
        platform-independent workarounds for platform-specific
        incompatibilities

    *   feature testing - before you use a feature, you test for
        it, so if it isn't there you can either NOT do it or
        provide a workaround

        *   you can put an object property as the condition for
            an if statement -- if it exists, it'll be treated as
            a true condition, and if not, it'll be treated as a
            false condition

            if ( ! myObj.desiredProperty )
            {
                  myObj.desiredProperty = something
                  (or otherwise handle)
            }

            ... myObj.desiredProperty ...

        *   how can you see if a method doesn't exist?

            ...type its name WITHOUT () or arguments!

            System will check if it exists WITHOUT invoking it!

            if (obj.desiredMethod)
            {
                 val = obj.desiredMethod(whatever) 
            }
            else
            {
                 val = obj.alternativeMethod(whatever)
            }

    *   Platform-specific workarounds
        *  what if you can't test easily for some issue on a particular
           platform? You might just see if you're on that platform,
           and say what you do in that case.

    *   Ignore the problem

    *   Fail Gracefully

        *   means recgnizing that the required features are not
            available and informing the user that he/she will not
            be able to use your JavaScript program