ブラウザ依存はブラウザの実装でチェック
ところで、JavaScriptはご存知の通りブラウザ依存が多いですね。しかし、サービスとして要求されている限りはできる限りすべてのブラウザで同じように動くようにしたいものです。
ブラウザ依存を判別するときnavigatorオブジェクトのユーザーエージェントやブラウザバージョンを見て判断するのはよくありません。なぜならバージョンやユーザーエージェントが同じでも、マイナーアップデートで仕様が変わったりすることがありますし、そもそもバージョンアップへの対応にJavaScriptコードの対応をさせていくのは面倒なものです。
JavaScriptの場合は、オブジェクトに存在しないプロパティはundefinedとなります。undefinedは条件式的にはfalseになりますので、この性質を利用して、ブラウザの実装で処理を分けるようにします。
if (window.attachEvent) {
window.attachEvent('onload', function (evt) {alert('attachEvent called');});
} else {
window.addEventListener('load', function (evt) {alert('addEventListener called');});
}
この場合だとバージョンの小なり大なりを意識せず、ブラウザのJavaScriptの実装によってわけることができます。