Browser Check

M

McKirahan

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...
 
L

Lasse Reichstein Nielsen

McKirahan said:
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
 
M

Mick White

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
 
M

McKirahan

Mick White said:
McKirahan wrote:



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;
}
}
 
K

kaeli

Is this a very good browser check?

No, but it's a great way of doing object detection. :)

There is NO good browser check. There are simply too many browsers.

--
 
M

Mick White

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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top