Hatena::Groupos0x

FFFF RSSフィード

0xFFのメモです。

2008 January 31st Thursday

ユーザーエージェントに頼らないブラウザの判定

| 19:19 | ユーザーエージェントに頼らないブラウザの判定 - FFFF を含むブックマーク はてなブックマーク - ユーザーエージェントに頼らないブラウザの判定 - FFFF

Safari(WebKit)がgetMatchedCSSRulesでいけそうなので、windowのプロパティだけで最近のブラウザを一応判定できそう。Firefox(Geckoエンジン)がNGでした

if (window.ActiveXObject){
//IE
}
if (window.GeckoActiveXObject){
//Windows Firefox only
}
if (window.opera){
//Opera
}
if (window.getMatchedCSSRules){
//Safari3
}

やっぱりSafariはイマイチ。

まあ、Greasemonkeyで使うならこれで十分じゃないかなと。

Geckoの判定は下記の一行を入れる必要がありそうです。

if (window.navigator && navigator.userAgent && navigator.userAgent.indexOf("Gecko/") != -1) window.isGecko = true;

quaaquaa2008/01/31 20:49>ところで、Operaだとdocument.postMessageなんだよね。なんで違うんだ?

以前のHTML 5の仕様(http://www.whatwg.org/specs/web-apps/2006-01-01/#postmessageなど)ではpostMessageはDocumentの方に属していたので、おそらく実装時期によって違いが出ているんだと思います。

os0xos0x2008/01/31 20:57>quaaさん
おお、なるほど。納得です。
考えてみるとdocument同士のやり取りというより、window同士のやり取りに使う感じだからwindowのほうがしっくりきますね。

nanto_vinanto_vi2008/05/16 02:41'_' + Math.pow(10,len)
の代わりに
(1 << len).toString(2)
とすれば扱える桁数がちょっと増えるけど、ぱっとFirefoxで試した限り速度は遅くなるみたいですね。

それから「ユーザーエージェントに頼らないブラウザの判定」の追記部分「Firefox(Geckoエンジン)がNGでした」にins要素のタグ閉じ忘れがあります。

os0xos0x2008/05/16 03:11>nanto_viさん
なるほど。ぱっと見そちらのほうが速くなりそうですが、toStringがコスト高めなのかな。

タグ閉じ忘れの指摘ありがとうございます、修正しました。