HTML5のブラウザ検知をどうするか? 〜 「Modernizr」+α(File系とBlob)
HTML5のブラウザ検知をどうするか?
簡単に思いつくのはユーザーエージェント(UA)で検知する方法だろう。
しかし、
・UAは簡単に偽装できる
・世界中のブラウザのUAを調べるのも面倒
・微妙に変わっていくバージョン管理も面倒
・「え〜?正規表現とか書くのぉ?」(^^);
・調べきれていないブラウザはキックするのか?
など、色々と問題がある。
というわけで、HTML5特有の機能自体をチェックしてUAに依存しないようにする方法が有効そうだ。
そこでTwitterも使っているらしい「Modernizr」というJavaScriptライブラリ(MIT&BSDライセンス)を使わせて頂く。
Modernizr: the feature detection library for HTML5/CSS3
ここで使いたいHTML5の機能を選んでカスタマイズできる。
Modernizr Download Builder
今回使う機能はCanvas、Drag 'n Drop、Inline SVG、SVGなので、それらをチェックする。
「Extra」のところと「Extensibility」のところでデフォルトでチェックされているものがいくつかある。今回はExtraのところは必要なかったのでチェックを外した。始めExtensibbilityのModernizr.hasEvent()も外したが、これを外すと動作しないようなのでチェックしておく。
カスタマイズが終わったら「GENERATE!」する。
すると下の方のテキストエリアにコードが出力されるので、「DOWNLOAD」ボタンでJSファイルをダウンロードする。
あとはHTMLの方でこのように読み込ませる。
上の例は、bodyが解釈されてレンダリングが始まる前に(ページが真っ白な状態で)必要な機能のチェックが行われ、対応・非対応をダイアログで表示する。
各機能は「Modernizr.canvas」のような感じでチェックする。対応ならtrueが返ってくる。各機能とModernizrのプロパティーとの対応はここに書いてある。
Modernizr Documentation
今回は特に、File系の機能とBlobの機能も必要だったのだけど、Modernizrにはそれらしきプロパティーが無い。
そこで、「window.File」のような感じで必要な機能をさらに列挙していった。恐らくModernizerにプロパティーが無いのは、このように簡単にチェックできるためだと思われ。
これでUA依存のブラウザ検知とはサヨナラだ。
簡単に思いつくのはユーザーエージェント(UA)で検知する方法だろう。
しかし、
・UAは簡単に偽装できる
・世界中のブラウザのUAを調べるのも面倒
・微妙に変わっていくバージョン管理も面倒
・「え〜?正規表現とか書くのぉ?」(^^);
・調べきれていないブラウザはキックするのか?
など、色々と問題がある。
というわけで、HTML5特有の機能自体をチェックしてUAに依存しないようにする方法が有効そうだ。
そこでTwitterも使っているらしい「Modernizr」というJavaScriptライブラリ(MIT&BSDライセンス)を使わせて頂く。
Modernizr: the feature detection library for HTML5/CSS3
ここで使いたいHTML5の機能を選んでカスタマイズできる。
Modernizr Download Builder
今回使う機能はCanvas、Drag 'n Drop、Inline SVG、SVGなので、それらをチェックする。
「Extra」のところと「Extensibility」のところでデフォルトでチェックされているものがいくつかある。今回はExtraのところは必要なかったのでチェックを外した。始めExtensibbilityのModernizr.hasEvent()も外したが、これを外すと動作しないようなのでチェックしておく。
カスタマイズが終わったら「GENERATE!」する。
すると下の方のテキストエリアにコードが出力されるので、「DOWNLOAD」ボタンでJSファイルをダウンロードする。
あとはHTMLの方でこのように読み込ませる。
<!DOCTYPE html>
<html lang="ja">
<head>
<script src="js/modernizr.custom.js"></script>
<script type="text/javascript">
if (Modernizr.canvas && Modernizr.svg && Modernizr.draganddrop && Modernizr.inlinesvg && window.File && window.FileReader && window.FileList && window.Blob){
alert("対応");
} else {
alert("非対応");
}
</script>
</head>
<body>
<h1>HTML5ブラウザ検知</h1>
</body>
</html>
上の例は、bodyが解釈されてレンダリングが始まる前に(ページが真っ白な状態で)必要な機能のチェックが行われ、対応・非対応をダイアログで表示する。
各機能は「Modernizr.canvas」のような感じでチェックする。対応ならtrueが返ってくる。各機能とModernizrのプロパティーとの対応はここに書いてある。
Modernizr Documentation
今回は特に、File系の機能とBlobの機能も必要だったのだけど、Modernizrにはそれらしきプロパティーが無い。
そこで、「window.File」のような感じで必要な機能をさらに列挙していった。恐らくModernizerにプロパティーが無いのは、このように簡単にチェックできるためだと思われ。
これでUA依存のブラウザ検知とはサヨナラだ。


コメント
コメントを投稿