As good as ASP.NET’s adaptive rendering is, I sometimes find myself needing to do some fairly substantial client-side scripting. I used to sniff browsers, but that was getting tedious, and most common scripts are written upside down anyway.
The best method I’ve seen is to use ‘object sniffing’–testing browsers for support of different objects and methods. This saves a considerable amount of time, since all browsers will fall into 3-4 categories of object support, and you don’t have to parse out a zillion different browser types and subtypes and still run the risk of excluding one that may work on your site.
My guide was http://developer.apple.com/internet/webcontent/objectdetection.html. The article is a couple of years old, but it’s still useful to me today.
I haven’t played around with custom server controls, so I don’t know how applicable this is for that purpose.