Jerry Park <No*****@No.Spam> writes:
Szar wrote: JS noob. I've seen plenty of browser detection scripts but they all seem to
be slightly different and don't really fit my needs. I have various places
where if the browser is IE I'd like to display [this html code] else
[display this]. For example, if a browser is IE I want to use this CSS file
otherwise use a different one and if it's IE make this cell x pixels high
else make it y pixels high. I'm sure this is easy, please excuse my
stupidity.
Steve.
Browser detection scripts are generally a bad idea. There are multiple
browsers and multiple versions of those browsers running. Many
browsers lie, and many can be set to say they are anything their user
wants them to say. Your detection script, no matter how good, cannot
reliably determine what the browser is.
Almost without exception, when a site fails to operate properly in my
browser, I find that it is because of a browser detection script and
javascript which fails to serve the page because either the site
designer doesn't want to support my browser and deliberately excludes
it, or because the site designer thinks erroneously that my browser
can't render the page, or because the site designer has erroneously
identified my browser as some other browser or browser version.
It is far better to write to standards. When you write to standards
and a page doesn't display properly, the client knows that it is the
fault of his browser -- not because of your code.
You overestimate the common user of IE, the type that think the
"e"-icon opens "the internet". He never heard of other browsers, an
all that matters is that the page works for him.
Otherwise I agree: Write to standards, but allow for a few fall-backs
if the browser doesn't support standards well enough (like IE and CSS2).
The best way to make a fallback, is to use object detection, not
browser detection. That is, instead of:
---
if (browseDetect() == "IE") {
var elem = document.all['foo'];
} else {
var elem = document.getElementById("foo");
}
---
you do:
---
if (document.getElementById) {
var elem = document.getElementById("foo");
} else if (document.all) {
var elem = document.all['foo'];
} else {
// handle error
}
---
Points to notice: Default is the standard method, getElementById. Even
if some new browsers understands document.all, they will use the standard
method first. It is safer that way.
There are browsers other than IE that support document.all, and browsers
that claim to be IE that doesn't support it. Testing for the object you
need directly avoids pitfalls like these.
Be ready to handle the complete failur, just as you are prepared for
Javascript to be completely unavailable.
The safest way to make a specific fallback for IE is to use the
IE-proprietary conditional comments:
<!--[if IE]>
.... all this is only seen by IE, all other browsers think it is
a normal HTML comment
<![end if]-->
However, these only work in IE 5+, and maybe the bug will be fixed in
IE 7, so you should include the version of IE:
<!--[if IE 6]> ... only IE 6 and lower ...
/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.'