16

タイトルが示すように、Google Chrome を検出する安全な機能ベースの (つまり、navigator.appName または navigator.appVersion を使用しない) 方法を見つけたいと思います。

機能ベースとは、たとえば次のことを意味します。

if(window.ActiveXObject) {
    // internet explorer!
}

編集:指摘されているように、質問はあまり意味がありません(明らかに、機能を実装したい場合はそれをテストし、特定のブラウザーを検出したい場合はユーザーエージェントを確認します)、申し訳ありません午前 5 時です ;) 次のように表現させてください。

4

11 に答える 11

32
isChrome = function() {
    return Boolean(window.chrome);
}
于 2008-09-17T15:45:51.550 に答える
9

この答えは非常に時代遅れですが、石器時代には非常に関連性がありました。

ここでOperaのあいまいさをグーグルで検索したので、機能検出はnavigator.userAgentの解析よりも便利だと思います。IE16が/MSIE16.0; / regexpを解析するかどうかは誰にもわかりませんが、document.allがサポートされることは間違いありません。実際には、機能は通常、「XMLHttpRequestがありませんか?f .... d IE6です!」のように、ブラウザーの同義語です。 非IEブラウザはdocument.allをサポートしていませんが、Maxthonなどの一部のブラウザはuserAgentをスクランブルできます。(もちろん、スクリプトは何らかの理由でFirefoxでdocument.allを定義できますが、簡単に制御できます。)したがって、この解決策をお勧めします。

ここで編集私は完全なリソースを見つけました。

編集2私はそのdocument.allもOperaでサポートされていることをテストしました!

var is = {
  ff: window.globalStorage,
  ie: document.all && !window.opera,
  ie6: !window.XMLHttpRequest,
  ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera,
  ie8: document.documentMode==8,
  opera: Boolean(window.opera),
  chrome: Boolean(window.chrome),
  safari: window.getComputedStyle && !window.globalStorage && !window.opera
}

使用は簡単です:

if(is.ie6) { ... }
于 2010-05-18T06:43:24.447 に答える
4

質問に対する正確な答えではありません...しかし、特定のブラウザブランドを検出しようとしている場合、機能チェックのポイントは失われています. 他のブラウザが Chrome の userAgent 文字列を使用しているとは思えないため、「このブラウザは Chrome ですか」という質問がある場合は、それを確認する必要があります。(ちなみに、window.ActiveXObject は IE を保証するものではありません。このオブジェクトを提供する他のブラウザー用のプラグインがあります。これは、私が作ろうとしていたポイントを示しています。)

于 2008-09-17T08:27:22.087 に答える
4

すべての標準ナチスについて...時には、まだ標準ではありませんが、... css3機能などの出血する「標準テクノロジー」を使用したい場合があります。

それがこのページを見つけた理由です。

何らかの理由で、Safari は border-radius と box-shadow の組み合わせを問題なく実行しますが、chrome は組み合わせを正しくレンダリングしません。したがって、組み合わせを無効にするのは webkit ですが、クロムを検出する方法を見つけるとよいでしょう。

特定のブラウザー/バージョンを検出する何百もの理由に遭遇しましたが、通常はクールな機能のアイデアを破棄することになります。なぜなら、私がやりたいことが大きな悪によってサポートされていないからです...

しかし、まだ標準化されていない機能でも、クールすぎて使用できない場合があります。

于 2009-02-24T17:58:40.510 に答える
1

私は行動/能力検出をよく使用します。ブラウザーの名前 (ユーザー エージェント) に基づいて回避するのではなく、回避する前に、ブラウザーが機能をサポートしているかどうかを直接確認します。

ブラウザー固有の回避策の問題は、バグが修正されたかどうか、または機能が現在サポートされているかどうかがわからないことです。機能の検出を行うと、ブラウザーがそれを直接サポートしているかどうかがわかり、単にブラウザー主義者であるだけではありません。

http://diveintohtml5.ep.io/everything.html

于 2010-05-18T07:22:45.363 に答える
1

したがって、Marijn の指摘を受け入れ、javascript を介してユーザー エージェント文字列をテストすることに関心がある場合は、次のようにします。

var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

(クレジット: http://davidwalsh.name/detecting-google-chrome-javascript )


これは、クロムユーザーエージェント文字列の本当に素晴らしい分析/内訳です: http://www.simonwhatley.co.uk/whats-in-google-chromes-user-agent-string

于 2008-09-17T08:38:20.157 に答える
0

特にChromeを検出するべきではありません。ページのレンダリングに関する限り、Chrome は他の WebKit ブラウザー (Safari、Epiphany) とまったく同じように動作する必要があるため、WebKit を検出する必要があります。

WebKit を検出するだけでなく、使用されているバージョンを正確に調べる必要がある場合は、次のリンクを参照してください: http://trac.webkit.org/wiki/DetectingWebKit

しかし、他の人が上で言ったように、ブラウザーを検出するのではなく、機能を検出する必要があります。詳細については、ADC の記事を参照してください: http://developer.apple.com/internet/webcontent/objectdetection.html

于 2008-09-17T15:52:47.057 に答える
0

このコードを使用して、各ブラウザーのブックマークを作成します (または webkit のメッセージを表示します)

if (window.sidebar) {
// Mozilla Firefox ブックマーク
window.sidebar.addPanel(タイトル, URL,"");
} else if( window.external ) { // IE お気に入り
  if(window.ActiveXObject) {
  //つまり
  window.external.AddFavorite( URL, タイトル);
  } そうしないと {
  //クロム
  alert('[OK] をクリックした後、ctrl+D を押してブックマークします (Mac の場合は Command+D)');
  }
} それ以外の場合 (window.opera && window.print) {
// オペラ
  true を返します。}
 else { //サフリ
 alert('[OK] をクリックした後、ctrl+D を押してブックマークします (Mac の場合は Command+D)'); }

于 2009-03-26T16:46:34.177 に答える
0

ブラウザが Chrome であることを知る必要がある理由の 1 つは、それが非常に標準に準拠しているからです。標準に準拠していると思っていた古い JavaScript コード (かなり優れている FF または Opera 標準による) で既に問題に遭遇しましたが、Chrome はさらにうるさいものでした。一部のコードを書き直す必要がありましたが、場合によっては、 if(isChrome) { blah...blah ) トリックを使用して実行する方が簡単な場合があります。Chrome は非常にうまく機能しているように見えます (私は標準に準拠しています) が、ユーザーが何を実行しているかを詳細に知る必要がある場合があります。

また、Chrome は非常に高速です。問題は、一部の JavaScript コードが意図せずに他のブラウザの動作の遅さに依存することです。つまり、ページの読み込み、iframe の読み込み、スタイルシート リンクの配置、ページ ヘッドへの JavaScript リンクなどです。これらは、関数が実際に利用可能な場合に新しい問題を引き起こす可能性があります。ページ要素と対話します。だから今のところ、あなたは本当に知る必要があるかもしれません...

于 2009-02-24T16:38:43.727 に答える
-1

isIE:!!(!window.addEventListener && window.ActiveXObject)、

isIE6:typeof document.createElement('DIV')。style.maxHeight == "undefined"、

isIE7:!!(!window.addEventListener && window.XMLHttpRequest &&!document.querySelectorAll)、

isIE8:!!(!window.addEventListener && document.querySelectorAll && document.documentMode == 8)、

isGecko:navigator.product =='Gecko'、

isOpera:!! window.opera、

isChrome:!! window.chrome、

isWebkit:!!(!window.opera &&!navigator.taintEnable && document.evaluate && navigator.product!='Gecko')、

于 2010-07-07T17:39:58.087 に答える