以下斜め読んだ内容

pseudo translation of useful posts, book reviews, remarks,etc. twitter: feeddict

Craig Buckler「5 Reasons Why Browser Sniffing Stinks」@sitepoint

5 Reasons Why Browser Sniffing Stinks

sitepointブログより
ブラウザ検知(browser-sniffing)が薦められない理由を5つピックアップするという主旨のエントリ

以下斜め読んだ内容。

  • ブラウザ検知
    • Web標準登場以前の時代の産物
    • IEとNetscapeそれぞれ向けに異なるコードを書くことは普通のことだった
    • 現在では・・・
      • 異なるデバイスのためにコードを分岐することが求められることはまれ
    • Opera10の登場時に、ブラウザ検知コードがOperaのVer.を「1」と判定するエラーが至る所で多発した。
      • 現在もブラウザ検知は使われ続けてるテクニックの模様
  • はじめに結論
    • ブラウザ検知使うな
  • 理由1:文字列のパースが大変
    • navigator.userAgentやHTTP_USER_AGENTで取得できるUA情報の文字列に規則性がない。
    • ブラウザ名、バージョンNO、レンダリングエンジン、OS、言語、media player、.NET frameworkの情報が含まれ、組み合わせが色々ある
      • あらゆる組み合わせをテストすることが無理
    • Opera 10は、ブラウザ検知コードを考慮して、UA情報を9.8に修正した
  • 理由2:ブラウザ増え過ぎた
    • 昔。3つの主要ブラウザ。1?2のバージョン。
    • 今。5つの主要ブラウザ。複数のバージョン。複数のプラットフォーム。
  • 理由3:スケールしにくくメンテナンス大変
    • ブラウザ検知のコードセットは巨大になる。メンテナンスが大変
    • 新ブラウザ、新バージョンが登場すれば、既存のコードセットが破綻するリスクあり
  • 理由4:ブラウザは偽装する
    • OperaUA情報を「IE」にしてた。「IE以外お断り」サイトも見れるようにするため。
    • UA偽装
  • 理由5:必要になる場面が少ない
    • object detectionで事足りる場面がほとんど
    • IE7以下ではXHRオブジェクトをサポートしてないが、ActiveXオブジェクトで代用でき、この二つのオブジェクトで切り分けできる。
  • ブラウザ検知が必要になる場面
    • progressive enhancementを実践するとき
      • 例えば、IE5.5〜6ではPNG24bitをサポートしていない問題への対処では、ブラウザ検知は必要になる
        • この問題もIE5.5?6が使われなくなれば解消する問題
  • クロスブラウザCSS
    • ブラウザ検知不要
      • IE向けCSSは条件付きコメントで対処可能
        • 個人的好み。条件付きコメント使ってやることはブラウザ検知と同じなので好きじゃない
  • コメント欄
    • Q:理由1は、正規表現使いこなせば解決じゃね?
    • A:UA情報の入った文字列の中からVer.noなど重要な情報を抽出する作業が難しいのが問題
    • Q:ライブラリ(jQuery、prototype、etc.)使えばらくらくクロスブラウザじゃない?
    • A: jQueryもブラウザ検知には反対の立場、ChromeやQtWebをSafariと判定してる。
    • 俺のCMSはIE6-7では動くけどIE8で動かない、だからブラウザ検知が必要、との声
    • ブラウザ検知は使うべきじゃない点は同意だけど、UA情報をパースして必要な情報を取り出すことはそんなに大変じゃないよ、との声