Я использую встроенные функции jQuery для фактического обнаружения:
jQuery.each(jQuery.browser, function(i, val) {});
Что касается организации, это будет зависеть от вашего приложения. Я думаю, лучше всего поместить это в код инициализации, а затем использовать обнаружение там, где оно вам нужно. У меня все еще есть проблемы, из-за которых мне приходится иногда обнаруживать Проводник. Например, при использовании jQuery я обнаружил, что функции parent () и next () иногда имеют в проводнике разные значения по сравнению с Firefox.