как правило это делается через JS, через проверку user-agent (коряво, некоторые браузеры могут фальсифицировать, например opera) либо через особенности реализации (например на хабре на прошлой неделе проскакивал метод определения основанный на различии в реализации работы с массивами)