Using Javascript to detect Google Chrome to switch CSS
Asked Answered
I

5

12

I have been playing around with different scripts, I found one that works for everything but Chrome... this is the code I have been using to differ in .CSS files. I tried just makeing the Browser name into "Chrome" But that did not work.

if (browser == 'Firefox') {
    document.write('<link rel="stylesheet" href="../component/fireFoxdefault.css" />');
}
if (browser == 'Safari') {
    document.write('<'+'link rel="stylesheet" href="../component/default.css" />');
}
Intima answered 20/4, 2012 at 17:56 Comment(2)
Hmm, I know this isn't part of your question (and maybe you have a good reason for doing this) but you shouldn't write CSS to target a browser, you should target features... for instance, Safari and Chrome should definitely not require separate CSS. paulirish.com/2008/…Prod
Possible duplicate of JavaScript: How to find out if the user browser is Chrome?Senator
A
38

Use the following to detect chrome:

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

Source: http://davidwalsh.name/detecting-google-chrome-javascript

Update (2015-07-20):

The above solution does not always work. A more reliable solution can be found in this answer (see below). That being said, I would avoid browser detection and go with feature detection instead:

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

You can include a css file specifically for chrome like this:

if (isChrome) {
    document.write('<'+'link rel="stylesheet" href="../component/chromeDefault.css" />');
}

UPDATE (2014-07-29):

@gillesc has a more elegant suggestion for detecting Chrome which he posted in a comment below and it can also be viewed on this question.

var isChrome = !!window.chrome
Aigneis answered 20/4, 2012 at 18:0 Comment(8)
Alright that worked out nicely. I looked at that website and read it, but it really didn't make since for some reason with the "-1" at the end of the variable.Intima
.indexOf returns the position of the value (browser name) in the string (userAgent). The position starts with 0. -1 is returned if the value is not found. developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Aigneis
var is_chrome = !!window.chrome is a better detection method as user agent can be spoofed.Huneycutt
@gillesc thanks! I have included that in the answer.Aigneis
I found that chrome detection through user agent isn't reliable. For instance Opera 27 on linux includes "chrome" too in the user agent string.Gabriel
Above solution doesn't give correct results for some browsers. See this link #5125938 for the reason behind the incorrect result. This link #12626376 provides the correct answerWiebmer
@Wiebmer thanks for the links, I have included the second one in my answer aboveAigneis
TIL, Some versions of Edge define window.chrome, so the vendor check is still neededMckenney
S
1

Here are two simple methods,one using indexOf and one using test :

// first method 
function check_chrome_ua() {
    var ua = navigator.userAgent.toLowerCase();
    var is_chrome = /chrome/.test(ua);

    return is_chrome;
}

// second method */
function check_chrome_ua2() {
    var ua = navigator.userAgent.toLowerCase();
    var is_chrome = ua.indexOf("applewebkit/") != -1 && ua.indexOf("khtml") > - 1;

    return is_chrome;
}

alert(check_chrome_ua()); // false or true 
alert(check_chrome_ua2()); // false or true

After checking if chrome is in use or not with one of these two boolean functions,you can implement your method on changing the stylesheet.

Simmons answered 20/4, 2012 at 18:51 Comment(0)
I
1

Update for Chrome on iOS: Chrome 38 (tested on iOS 8.1) returns false on !!window.chrome. To fix this you can use:

function isChrome(){
    var windowChrome = !!window.chrome;
    if(!windowChrome){
        // Chrome iOS specific test
        var pattern = /crios/i;
        return pattern.test(window.navigator.userAgent);
    }else{
        return windowChrome;
    }
}

Google reference on the matter

Inflatable answered 26/11, 2014 at 16:6 Comment(1)
Chrome for iOS is just Safari, don't confuse the two.Preshrunk
N
0

In case you have a TypeScript error or warning. Maybe something like the following:

Property 'chrome' does not exist on type 'Window & typeof globalThis'

You can check if "chrome" is a key of the window object by doing something like so:

if("chrome" in window)

In my code, I created a function:

function isChrome(){
  return "chrome" in window;
}
Nameplate answered 21/2 at 13:15 Comment(0)
R
-1
var userAgent = navigator.userAgent.toLowerCase(); 
$.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase()); 

// Is this a version of Chrome?
if($.browser.chrome){
  userAgent = userAgent.substring(userAgent.indexOf('chrome/') +7);
  userAgent = userAgent.substring(0,userAgent.indexOf('.'));
  $.browser.version = userAgent;
  // If it is chrome then jQuery thinks it's safari so we have to tell it it isn't
  $.browser.safari = false;
}

// Is this a version of Safari?
if($.browser.safari){
  userAgent = userAgent.substring(userAgent.indexOf('safari/') +7);
  userAgent = userAgent.substring(0,userAgent.indexOf('.'));
  $.browser.version = userAgent;
}
Roll answered 20/4, 2012 at 18:11 Comment(2)
dont understand why in second line you use again navigator.userAgent.toLowerCase() since you have already declared it as userAgent above ;) Nice answer thoughSimmons
probably copy pasted above value instead of typeingAmplitude

© 2022 - 2024 — McMap. All rights reserved.