for...in文 + JavaScript1.2 + DOM1 + α。全てのプロパティではありません。いくつかのプロパティは、不具合回避にためコメントアウトしています。
JavaScriptで取得したnavigator.userAgentは、サーバで取得したUser-Agentとは異なり、最近増えてきた偽称ソフトの影響をあまり受けません。※iCabのようにブラウザ自体に偽称機能がある場合はダメです。