(2012/05/09 jQueryプラグイン を作成しました → こちら)
jQuery.browser は v1.3 以降では jQuery.support を使うことを推奨します…
と、なってはいるけど、現実的にはまだブラウザ間で描画の誤差、動作の違いがあったりしてそうもいかない。。 やっぱり、ブラウザ判定は欲しいよね。あわよくば、プラットフォーム判定もできるといいね^^
というわけで、今回は、nativeコードだけを使ってブラウザ判定スクリプトを書いてみた。
ブラウザ判定
/**
* @class Browser information クラス。
* 判定できるのは、このリストにあるブラウザのみ。Mozilaとか古いブラウザはちょっと対象外…。。
* 一応、携帯端末およびタブレットも含めて判定する。
*/
g.UserAgent.BrowserInfo = function () {
// Browser type.
this.msie = false; // Internet Explorer
this.firefox = false; // Firefox
this.chrome = false; // Chrome
this.safari = false; // Safari
this.browser = false; // Android標準ブラウザ
this.opera = false; // Opera
this.unknown = false; // other
// Browser version.
this.version = undefined;
};
/**
* 指定した UserAgent 文字列を解析して、ブラウザ情報を取得します。
*
* @param {string} userAgent 解析したい UserAgent 文字列
* @return {g.UserAgent.BrowserInfo} ブラウザ情報の解析結果オブジェクト
*/
g.UserAgent.getBrowserInfo = function (userAgent) {
var browser = new g.UserAgent.BrowserInfo();
var array;
// 小文字に正規化
userAgent = userAgent.toLowerCase();
// ブラウザ、バージョン判定
if (userAgent.indexOf('opera' ) >= 0) {
// Opera
browser.opera = true;
// Opera 9.00, Opera/9.0
array = /opera[\s\/]+([\d\.]+)/.exec(userAgent);
browser.version = (array) ? array[1] : '';
} else if (userAgent.indexOf('msie') >= 0) {
// Internet Explorer, Windows Phone, Sleipnir, Adobe Bridge
browser.msie = true;
// MSIE 9.0
array = /msie ([\d\.]+)/.exec(userAgent);
browser.version = (array) ? array[1] : '';
} else if (userAgent.indexOf('firefox') >= 0) {
// Firefox(Mozillaを含まない)
browser.firefox = true;
// Firefox/0.9.3
array = /firefox\/([\d\.]+)/.exec(userAgent);
browser.version = (array) ? array[1] : '';
} else if (userAgent.indexOf('chrome') >= 0) {
// Chrome, Android default browser
browser.chrome = true;
// Chrome/6.0.472.55
array = /chrome\/([\d\.]+)/.exec(userAgent);
browser.version = (array) ? array[1] : '';
} else if (userAgent.indexOf('android') >= 0) {
// Android標準ブラウザ
browser.browser = true;
// Version/4.0
array = /version\/([\d\.]+)/.exec(userAgent);
browser.version = (array) ? array[1] : '';
} else if (userAgent.indexOf('safari') >= 0) {
// Safari
browser.safari = true;
// Version/3.0.3
array = /version\/([\d\.]+)/.exec(userAgent);
browser.version = (array) ? array[1] : '';
} else {
// Other case
browser.unknown = true;
browser.version = '';
}
return browser;
};
ブラウザ判定の使い方
var browser = g.UserAgent.getBrowserInfo(window.navigator.userAgent);
for (var key in browser) {
console.info(key + ':' + browser[key]);
}
判定の順序が結構重要だったりする。
"opera"って文字列はどこにもないので一番最初に切り出し、"android"も"safari"より手前でないとダメ…といったところ。
バージョン判定はブラウザ毎に正規表現で対応してみた(半分、趣味で使ってるwww)。
メジャー、マイナーとかまでは判定しないので、利用時は要注意で。
ちなみに、ブラウザ情報なんて一度取得したらそれっきりでいいはずなのに、
わざわざメソッドにして引数までつけているのは…
テストコードを書きたかったから。
実際に利用するときはこのコードをベースに static なクラスで、 インスタンス一度作ったら2度と作らなくて良い(同じ処理をしなくて良い)ようにするといいと思う(^^;それから、なんとなく、気が向いたのでバージョン判定のスクリプトも書いてみた↓↓
バージョン情報判定
/**
* @class バージョン情報 クラス。
*/
g.Version = function (version) {
var arr;
arr = /(\d)+.+(\d)+.+(\d)+.+(\d)+/.exec(version);
this.major = (arr && arr[1]) ? arr[1] : '';
this.minor = (arr && arr[2]) ? arr[2] : '';
this.revision = (arr && arr[3]) ? arr[3] : '';
this.build = (arr && arr[4]) ? arr[4] : '';
};
バージョン情報判定の使い方
var versionInfo = new g.Version('6.0.472.55');
console.info(versionInfo.major); // 6
console.info(versionInfo.minor); // 0
console.info(versionInfo.revision); // 472
console.info(versionInfo.build); // 55
バージョン判定書いては見たけど…もっと拡張できそうな気がするので、 また、気が向いたときに別立てて書き起こそうかな…
今回のスクリプトを書く上で userAgent 文字列にどんなんものがあるか参考にしたのは以下のサイトです。
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!