24

クライアント マシンのブラウザが Opera または JavaScript を使用していないことを確認したいのですが、どうすればよいですか?

4

6 に答える 6

18
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
}
于 2010-01-04T08:57:35.060 に答える
8

上記の回答は、新しい 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

于 2015-07-24T11:23:21.703 に答える
7

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される可能性はありますが、その可能性は低いようです。

于 2010-01-04T14:38:10.813 に答える
-1

jQueryを使用してもよろしいですか?

その後、使用できますjQuery.browserドキュメントを参照

しかし、jQuery-guys はこれを使用しないことをお勧めします。

このプロパティを使用しないことをお勧めします。代わりに機能検出を使用してみてください ( jQuery.supportを参照) 。

編集:

Mootools の場合: 使用window.opera(ドキュメントを参照)

于 2010-01-04T08:55:38.840 に答える