My comments on ...

... everything bothering me

The better way of Capability Detection, Part 2

, ,

I haven't found time earlier to write this down, so I've made a note with the code attached and do it now wink

In execution of my occupation, last week (or so) I wrote a post "nagging at the nagger". This is round 2, he has given response (he basically says it's not worth the hassle).

I've removed the "finally" part and shortened the most important part down from two lines to one (thereby obscuring it a bit, *sigh*).

Based on a suggestion from Crisp, I wrapped it around an anonymous function, to prevent the variables from being declared in global scope. I've put the function into the condition (as opposed to the other way round), because the program then can tell right away that this function does not need to be executed, as opposed to executing the function and then evaluating the condition.

if (!window.XMLHttpRequest)
{
    (function()
     {
      var temp;
      var types = [
          'MSXML2.XMLHTTP.6.0',
          'MSXML2.XMLHTTP.3.0'
      ];

      for (var i = 0; i < types.length; i++)
      {
          try
          {
              void((temp = function(){return new ActiveXObject(types[i])})());
          }
          catch {temp = null}
          if(temp) break;
      }
      window.XMLHttpRequest = temp || function(){return undefined};
     }
    )();
}


Now, let's have a look at the most tricky part:

void(temp = function(){return new ActiveXObject(types[i])}());

// reformatted looks like this:

void(                                            /* void the result, to protect browsers
                                                    that return/throw "false" or similar */
     (temp = function()                          /* assign a function to the variable... */
            {
               return new ActiveXObject(types[i])
            })()                                 /* and then call it by inserting parenthe-
                                                  ses after those enclosing the function */
     );


Interestingly, I haven't yet tested it, though. Funny thing, that.

The better way of Capability DetectionThe "classic example"

How to use Quote function:

  1. Select some text
  2. Click on the Quote link

Write a comment

Comment
(BBcode and HTML is turned off for anonymous user comments.)

If you can't read the words, press the small reload icon.


Smilies

February 2012
M T W T F S S
January 2012March 2012
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29