jQueryのブラウザ判別プラグイン

2012/01/17 | JavaScript/Ajax

以下のサイトで、jQueryプラグインで、UserAgentを判別する機能が提供されている。

http://tenderfeel.xsrv.jp/jquery/1176/jquery/1174/

インターフェイスがシンプルなので是非使いたいと思ったが、なぜかiPad、iPhoneで動いてくれない。でも他のブラウザでは動作しているように見える。初めてこのプラグインに出会ったときは「中途半端な出来なのかな(失礼)」と思い、使用を諦めたのだけれど、$.browserに値が組み込まれるというシンプルで美しい実装に心ひかれて、どうしても使いたくなった。

少なくとも「navigator.userAgent.indexOf」と書くよりは見栄えがいいと思って。

ちなみに配布されている状態では以下のようなエラーが出る(iPadで)。

TypeError: ‘null’ is not an object

「これって当たり前でしょ」ってエラー(nullがオブジェクトなわけがない)。検討してみてiOSで動かないことがわかった。でもiOSでも動作するような実装になっている。とくれば、きっと内部コードにあるiOSの場合のみ起動する部分があるはず。ということでコードを追うことにした。

でも分岐処理がわかりやすくて、コードもシンプルで、一目見て原因がわかった。UserAgentを抜き出すための正規表現の問題だ。iOS5になってUserAgentの書式が変更されたことで、本来配列として返される変数がnullになってしまっていたようだ。

112行目あたりを変更して動作した。

//var m = ua.match(/\((\w+); U;[\w\s]+? OS (\d_\d(?:_\d)*)/i);
var m = ua.match(/\((\w+); [U;]?[\w\s]+? OS (\d_\d(?:_\d)*)/i);

スマホ系に特化したUserAgentも動作しなかったので、おそらく似たような修正で動くんじゃなかろうか。

綺麗なプログラムを公開なさっている作者に感謝。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net