The better way of Capability Detection, Part 2
Friday, December 15, 2006 1:41:33 AM
I haven't found time earlier to write this down, so I've made a note with the code attached and do it now 
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.
Now, let's have a look at the most tricky part:
Interestingly, I haven't yet tested it, though. Funny thing, that.

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.










How to use Quote function: