クライアント マシンのブラウザが Opera または JavaScript を使用していないことを確認したいのですが、どうすればよいですか?
6 に答える
if(window.opera){
//do stuffs, for example
alert(opera.version()); //10.10
}
opera
冗談ではありません。Operaブラウザにオブジェクトがあります。
オブジェクトopera
はオーバーライド可能ですが、オーバーライド可能でもあると思うかもしれませnavigator
ん。
更新:
より正確な結果を得るには、次のようにすることができます
if (window.opera && opera.toString() == "[object Opera]"){
//do stuffs, tested on opera 10.10
}
そして気がついたのですが、Opera には addEventListener と attachEvent の両方があるので、次のような方法もあります。
if (window.addEventListener && window.attachEvent){
//do stuffs, tested on opera 10.10
}
上記の回答は、新しい Opera 30 では機能しなくなりました。Opera は現在 Chromium を使用しているためです。以下をご利用ください。
var isChromium = window.chrome,
isOpera = window.navigator.userAgent.indexOf("OPR") > -1 || window.navigator.userAgent.indexOf("Opera") > -1;
if(isChromium !== null && isOpera == true) {
// is Opera (chromium)
} else {
// not Opera (chromium)
}
新しいOpera 30リリースではChromiumが完全に使用され、 OPRに変更されましuserAgent
た
Prototype.js では、次の推論を使用します。
var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
これは基本的に、window.opera
オブジェクトが存在し、その内部 [[Class]] 値が「Opera」であることを確認します。これは単に存在をチェックするよりも確実なテストです。関係のないグローバル変数が邪魔をして誤検知を引き起こすwindow.opera
可能性がはるかに少ないからです。opera
無関係なグローバル変数について言えば、たとえば MSHTML DOM では、要素は id/name によってグローバルに解決できることを思い出してください。これは<a name="opera" href="...">foo</a>
、マークアップにのようなものが存在すると、window.opera
そのアンカー要素が参照されることを意味します。あなたの偽陽性があります...
つまり、存在だけでなく、[[Class]] の値をテストします。
そしてもちろん、ブラウザをスニッフィングする前に、常によく考えてください。多くの場合、問題を解決するためのより良い方法があります;)
PS Opera の将来のバージョンで [[Class]] が変更window.opera
される可能性はありますが、その可能性は低いようです。
jQueryを使用してもよろしいですか?
その後、使用できますjQuery.browser
(ドキュメントを参照)
しかし、jQuery-guys はこれを使用しないことをお勧めします。
このプロパティを使用しないことをお勧めします。代わりに機能検出を使用してみてください ( jQuery.supportを参照) 。
編集:
Mootools の場合: 使用window.opera
(ドキュメントを参照)