JavaScript:ユーザーのブラウザーがChromeかどうかを確認する方法は?


220

ブラウザがかどうかを確認するためにブール値を返す関数が必要です Chromeです。

このような機能を作成するにはどうすればよいですか?


16
代わりに機能の検出を実行しなくてもよろしいですか(「これはChromeですか?」と尋ねるのではなく、「これは必要ですか?」と尋ねます)
bdukes

42
知るか?ユーザーに
Chrome

2
この質問は、ユーザーエージェントの検出の問題を示しています。たった3年後、Fun 3D Box Backgroundはローエンドの携帯電話をChromeにロードしようとしますが、ハイエンドのデスクトップコンピューターのFirefoxでさえ試しません。
アルバロゴンサレス

5
私は機能検出が進むべき道であることに同意します。ただし、検出したい正当な領域があります。たとえば、クロムのみのパッチxhr.sendAsBinaryにしたいです。私の最初の解決策は、filereader.readasbinaryが実装されているかどうかをチェックしました。ただし、特定のモバイルブラウザーにもパッチが適用され、アップロードが失敗するという問題があります。この修正はChromeのみに適用します。
凍りつくような素晴らしい

4
ブラウザーがChromeであるかどうかを知ることが重要である理由を知りたいですか?ChromeがRSSフィードを読み込めないのはどうですか?Chromeでの読み込みに失敗するRSSフィードにリンクする代わりに、実際に警告を表示したり、ユーザーをリダイレクトしたりできますか?グーグルクロームに感謝...
Pic Mickael

回答:


205

更新:これを処理するための更新された方法については、Jonathanの回答を参照してください。以下の答えはまだ機能する可能性がありますが、他のブラウザで誤検知を引き起こす可能性があります。

var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);

ただし、前述のように、ユーザーエージェントはなりすましになる可能性があるため、機能検出(Modernizerなど)を使用することが常に最善です。、他の回答にあるように、これらの問題を処理するとき)です。


.toLowerCaseを使用する理由は何ですか-なぜnavigator.userAgent.indexOf( 'Chrome')を使用しないのですか?
Jon

7
@Sergは、Chromeがないためです。iOS Safari周辺のスキンにすぎません。
Poetro、

2
ありがとう、var名はcamelCaseにしてください
Dimitri Kopriwa

5
これで多くのブラウザがtrueを返すので、Edge、Maxthon、iOSサファリなどを除外したコードを次に示します var is_chrome = ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) &&(navigator.vendor.toLowerCase().indexOf("google") > -1));
Alex C.

2
オペラ(少なくともバージョン42)が復帰するGoogle Incまでnavigator.vendor、このメソッドは防弾ではありませんので、のようなものは、/Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor) && !/OPR/.test(navigator.userAgent)おそらくより良い仕事でしょう
yorch

314

ブラウザがGoogle Chromeかどうかを確認するには、次のことを試してください。

// please note, 
// that IE11 now returns undefined again for window.chrome
// and new Opera 30 outputs true for window.chrome
// but needs to check if window.opr is not undefined
// and new IE Edge outputs to true now for window.chrome
// and if not iOS Chrome check
// so use the below updated condition
var isChromium = window.chrome;
var winNav = window.navigator;
var vendorName = winNav.vendor;
var isOpera = typeof window.opr !== "undefined";
var isIEedge = winNav.userAgent.indexOf("Edge") > -1;
var isIOSChrome = winNav.userAgent.match("CriOS");

if (isIOSChrome) {
   // is Google Chrome on IOS
} else if(
  isChromium !== null &&
  typeof isChromium !== "undefined" &&
  vendorName === "Google Inc." &&
  isOpera === false &&
  isIEedge === false
) {
   // is Google Chrome
} else { 
   // not Google Chrome 
}

使用例:http : //codepen.io/jonathan/pen/WpQELR

これが機能する理由は、Google Chromeインスペクタを使用してコンソールタブに移動するためです。「ウィンドウ」と入力し、Enterキーを押します。次に、「ウィンドウオブジェクト」のDOMプロパティを表示できます。オブジェクトを折りたたむと、「chrome」プロパティを含むすべてのプロパティを表示できます。

厳密なイコールtrueを使用してIEをチェックすることはできなくなりましたwindow.chrome。IEは以前は戻りましたがundefined、今では戻りますtrueしかし、何を推測すると、IE11は再び未定義を返します。IE11はまた、空の文字列を返す""ためにwindow.navigator.vendor

これが役に立てば幸いです!

更新:

新しいOpera 18+がに対してtrueを出力することを以下に指摘してくれたHalcyon991に感謝しますwindow.chromeOpera 18Chromium 31をベースにしているようです。それで、window.navigator.vendoris is "Google Inc"and not isであることを確認するチェックを追加しました"Opera Software ASA"。また、RingAdrien Beのおかげで、Chrome 33がtrueを返さwindow.chromeなくなったことが判明しました。しかし、IE11に細心の注意を払って、undefinedIE11 undefinedが最初にリリースされたときと同様に出力するようにしたので、チェックバックを追加しました..その後、いくつかの更新ビルド後に出力されtrueました..最近の更新ビルドがundefined再び出力されています。マイクロソフトはそれを補うことができません!

更新 2015/7/24-Operaチェックの追加

Opera 30がリリースされました。出力しなくなりましたwindow.opera。またwindow.chrome、新しいOpera 30ではtrueに出力されます。したがって、userAgentにOPRがあるかどうかを確認する必要があります。Google Chromeと同じレンダリングエンジンを使用しているため、Opera 30のこの新しい変更に対応するために、上記の条件を更新しました。

UPDATE 2015/10/13-IEチェックの追加

原因それは出力にIEエッジのチェックを追加しましtrueためwindow.chromeにもかかわらず、IE11出力.. undefinedためwindow.chrome。これについて知らせてくれたartfulhackerに感謝します!

UPDATE 2 /5/2016-iOS Chromeチェックの追加

iOSのChrome CriOSに出力するtrueため、iOS Chromeのチェックを追加しました。これについてお知らせしてくれたxinthoseに感謝します。

UPDATE 4 /18/2018-Operaチェックの変更

Operaのチェックを編集しましたが、Chrome 66にはチェックwindow.oprがありません。これを報告してくれたFrosty ZDaniel Wallmanに感謝します!undefinedOPRwindow.navigator.vendor


これはIE10では機能しません。IE10のtypeof window.chromeは{object}を返します
magritte 2013年

2
var isGoogleChrome = window.chrome!= null && window.navigator.vendor === "Google Inc.";
リング

1
ありがとう@xinthose .. IOS Chromeのチェックを追加しました。:)
Jonathan Marzullo 2016

2
ダニエルウォールマンと同じ問題かもしれません。私のAndroid Chromeユーザーエージェントには「OPR」文字列が含まれています。Mozilla/5.0 (Linux; Android 8.0.0; ASUS_Z012D Build/OPR1.170623.026) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36したがって、falseをisChrome()返します
Frosty Z

2
@FrostyZと@DanielWallmanにお知らせいただきありがとうございます。Operaがチェックしwindow.oprないように修正しましたundefined
Jonathan Marzullo


16

より単純な解決策は、単に使用することです:

var isChrome = !!window.chrome;

!!ただブール値にオブジェクトを変換します。Chrome以外のブラウザでは、このプロパティはになりますがundefined、これは真実ではありません。

これは、ChromeベースのEdgeのバージョンでもtrueを返すことに注意してください(これを指摘してくれた@Carrmに感謝します)。


5
Operaは、実際に返しtruewindow.chrome。防弾検出+修正が含まれているconditionizr.comを確認してください。
Halcyon991

7
まあ、Operaは基本的にChromeです
KarelBílek14年

なぜ二度かわからない!! 、uは直接使用できます、if(chrome){}
Vishal Sharma

3
@vishalsharma、は!!値をtrueまたはに変換しますfalsetypeof(window.chrome)を与える"object"が、typeof(!!window.chrome)を与える"boolean"ifステートメントが変換を行うため、コードサンプルも機能します。
Drew Noakes、2014

1
これtrueはEdgeにも戻ります。
カーム

14

console.log(JSON.stringify({
  isAndroid: /Android/.test(navigator.userAgent),
  isCordova: !!window.cordova,
  isEdge: /Edge/.test(navigator.userAgent),
  isFirefox: /Firefox/.test(navigator.userAgent),
  isChrome: /Google Inc/.test(navigator.vendor),
  isChromeIOS: /CriOS/.test(navigator.userAgent),
  isChromiumBased: !!window.chrome && !/Edge/.test(navigator.userAgent),
  isIE: /Trident/.test(navigator.userAgent),
  isIOS: /(iPhone|iPad|iPod)/.test(navigator.platform),
  isOpera: /OPR/.test(navigator.userAgent),
  isSafari: /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent),
  isTouchScreen: ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch,
  isWebComponentsSupported: 'registerElement' in document && 'import' in document.createElement('link') && 'content' in document.createElement('template')
}, null, '  '));


残念ながら、navigator.vendor === "Google Inc." Opera(少なくともv.49)では、コードを使用するとOperaはChromeとして表示されます。
Wojtek Majerski 2017

9
世界のどこかで、子猫は私たちが実際に必要としないすべての正規表現で死にます。
Sz。

説明はなく、誤検出/否定の兆候はなく、コードの一部がここにダンプされています...この応答は実際には反対票です。それは尋ねられた質問への答えでさえありません。
Alexandre Germain

8
var is_chrome = /chrome/.test( navigator.userAgent.toLowerCase() );

3
私はこれが好きでした、あなたはvar is_chrome = /chrome/i.test(navigator.userAgent); あまりにも
アランフォスター2011

14
trueMicrosoft Edgeに戻ります。
コビー2016

@Cobby:当然のことながら、Edgeは当時リリースされていませんでした。情報をありがとう:)
naveen

3

Chromeの特定のバージョンも必要になる場合があります。

var ua = navigator.userAgent;
if(/chrome/i.test(ua)) {
    var uaArray = ua.split(' ')
    ,   version = uaArray[uaArray.length - 2].substr(7);
}

私の中で彼の答えを使用したことに対するビッグリボウスキへの謝罪。


4
バージョンは"537.36"Microsoft Edgeにあります。
コビー2016

3

以下を使用できます。

navigator.userAgent.indexOf("Chrome") != -1

それはv.71に取り組んでいます


navigator.userAgent.includes("Chrome")
AlexSzücs

2

MacのChromeで動作します。上記のすべてよりも(userAgent文字列をテストする場合)シンプルであるか、信頼性が高いようです。

        var isChrome = false;
        if (window.chrome && !window.opr){
            isChrome = true;
        }
        console.log(isChrome);

2
const isChrome = window.chrome && !window.opr;
ifeelbadformyoldquestions

1

ユーザーはユーザーエージェントを変更できます。要素のオブジェクトでwebkit接頭辞付きのプロパティをテストしてみてくださいstylebody

if ("webkitAppearance" in document.body.style) {
  // do stuff
}

1
Firefoxの場合:(document.body.styleの「webkitAnimation」)=== true
Tomas Prado

3
参考:「webkitAppearance」も機能しなくなりました。Edgeは現在それを使用しています。おそらくあなたの答えを削除するのが最善です。^^
hexalys 2017


0

さまざまなデスクトップブラウザ(Firefox、IE、Opera、Edge、Chrome)の名前を知る。サファリを除く。

function getBrowserName() {
  var browserName = '';
  var userAgent = navigator.userAgent;
  (typeof InstallTrigger !== 'undefined') && (browserName = 'Firefox');
  ( /* @cc_on!@*/ false || !!document.documentMode) && (browserName = 'IE');
  (!!window.chrome && userAgent.match(/OPR/)) && (browserName = 'Opera');
  (!!window.chrome && userAgent.match(/Edge/)) && (browserName = 'Edge');
  (!!window.chrome && !userAgent.match(/(OPR|Edge)/)) && (browserName = 'Chrome');

  /**
   * Expected returns
   * Firefox, Opera, Edge, Chrome
   */
  return browserName;
}

次のブラウザバージョンで動作します。

Opera - 58.0.3135.79
Firefox - 65.0.2 (64-bit)
IE - 11.413.15063 (JS Fiddle no longer supports IE just paste in Console)
Edge - 44.17763.1.0
Chrome - 72.0.3626.121 (Official Build) (64-bit)

ここで要点とここでフィドルを表示します

元のコードスニペットはChromeで機能しなくなったため、どこで見つけたか忘れました。以前はSafariを使用していましたが、Safariにアクセスできなくなったため、確認できなくなりました。

FirefoxとIEのコードのみが元のスニペットの一部でした。

Opera、Edge、Chromeのチェックは簡単です。userAgentには違いがあります。OPROperaにのみ存在します。EdgeEdgeにのみ存在します。したがって、Chromeを確認するには、これらの文字列が存在してはなりません。

FirefoxとIEについては、私はそれらが何をしているのか説明できません。

私が書いているパッケージにこの機能を追加します


-4

すべての答えは間違っています。「オペラ」と「クローム」はすべて同じです。

(編集部分)

これが正しい答えです

if (window.chrome && window.chrome.webstore) {
    // this is Chrome
}

1
答えよりも良いコメント。
ジェイスコットン2015

あなたがなぜ改造されたのか疑問に思っている場合、これは単に真実ではありません。たとえば、キーボードショートカットの処理やキー修飾子へのアクセス方法が異なります(これらも機能検出できません)。
Zilk、2015年

「オペラ」と「クローム」は同じブラウザだけというアイコンは違うとは言いません。上記の方法は、両方のブラウザで同じ結果をもたらしていると私は言います。
Ararat Harutyunyan、2015年

@Zilkたとえば、66票の最初の回答をテストしましたか?
Ararat Harutyunyan、2015年

9
これはChrome 71以降window.chrome.webstoreは機能しなくなります。現在undefined
Esteban
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.