By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,946 Members | 1,701 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,946 IT Pros & Developers. It's quick & easy.

Browser Check

P: n/a
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...
Jul 20 '05 #1
Share this Question
Share on Google+
6 Replies


P: n/a
"McKirahan" <Ne**@McKirahan.com> wrote in message
news:Jm9%b.56686$Xp.269424@attbi_s54...
Is this a very good browser check?


<script cut>

See: http://jibbering.com/faq/#FAQ4_26
--
Andrew Urquhart
- FAQ: http://jibbering.com/faq
- Archive: http://groups.google.com/groups?grou...ang.javascript
- Reply: http://www.andrewu.co.uk/about/conta...=newsgroup_clj
Jul 20 '05 #2

P: n/a
"McKirahan" <Ne**@McKirahan.com> 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 - lr*@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'
Jul 20 '05 #3

P: n/a
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
Jul 20 '05 #4

P: n/a
"Mick White" <mw******@BOGUSrochester.rr.com> wrote in message
news:0F*******************@twister.nyroc.rr.com...
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;
}
}
Jul 20 '05 #5

P: n/a
In article <Jm9%b.56686$Xp.269424@attbi_s54>, Ne**@McKirahan.com
enlightened us with...
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.

--
--
~kaeli~
I do whatever my Rice Krispies tell me to.
http://www.ipwebdesign.net/wildAtHeart
http://www.ipwebdesign.net/kaelisSpace

Jul 20 '05 #6

P: n/a
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
Jul 20 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.