Using Javascript to detect Google Chrome to switch CSS
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
Detect element style change in chrome
You should be able to do this with a MutationObserver - see demo (Webkit only), which is the new, shiny way of getting notified about changes in the DOM. The older, now deprecated, way was Mutation events.
Demo simply logs in the console the old and new values when the paragraph is clicked. Note that the old value will not be available if it was set via a non-inline CSS rule, but the change will still be detected.
HTML
<p id="observable" style="color: red">Lorem ipsum</p>
JavaScript
var MutationObserver = window.WebKitMutationObserver;
var target = document.querySelector('#observable');
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log('old', mutation.oldValue);
console.log('new', mutation.target.style.cssText);
});
});
var config = { attributes: true, attributeOldValue: true }
observer.observe(target, config);
// click event to change colour of the thing we are observing
target.addEventListener('click', function(ev) {
observable.style.color = 'green';
return false;
}, false);
Credit to this blog post, for some of the code above.
JavaScript: How to find out if the user browser is Chrome?
Update: Please see Jonathan's answer for an updated way to handle this. The answer below may still work, but it could likely trigger some false positives in other browsers.
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
However, as mentioned User Agents can be spoofed so it is always best to use feature-detection (e.g. Modernizer) when handling these issues, as other answers mention.
JavaScript : Execute code only if it is not google chrome browser
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if(!is_chrome)
{
//do stuff
}
Edit: Not sure how this will effect chrome mobile browser.
Second Edit:
This throws a false positive in Microsoft Edge, the below code is the updated version:
var is_chrome = (typeof window.chrome === "object" && navigator.appVersion.indexOf('Edge') === -1)
How to detect Safari, Chrome, IE, Firefox and Opera browsers?
Googling for browser reliable detection often results in checking the User agent string. This method is not reliable, because it's trivial to spoof this value.
I've written a method to detect browsers by duck-typing.
Only use the browser detection method if it's truly necessary, such as showing browser-specific instructions to install an extension. Use feature detection when possible.
Demo: https://jsfiddle.net/6spj1059/
// Opera 8.0+
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';
// Safari 3.0+ "[object HTMLElementConstructor]"
var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || (typeof safari !== 'undefined' && window['safari'].pushNotification));
// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;
// Chrome 1 - 79
var isChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);
// Edge (based on chromium) detection
var isEdgeChromium = isChrome && (navigator.userAgent.indexOf("Edg") != -1);
// Blink engine detection
var isBlink = (isChrome || isOpera) && !!window.CSS;
var output = 'Detecting browsers by ducktyping:<hr>';
output += 'isFirefox: ' + isFirefox + '<br>';
output += 'isChrome: ' + isChrome + '<br>';
output += 'isSafari: ' + isSafari + '<br>';
output += 'isOpera: ' + isOpera + '<br>';
output += 'isIE: ' + isIE + '<br>';
output += 'isEdge: ' + isEdge + '<br>';
output += 'isEdgeChromium: ' + isEdgeChromium + '<br>';
output += 'isBlink: ' + isBlink + '<br>';
document.body.innerHTML = output;
How do you detect between a Desktop and Mobile Chrome User Agent?
The problem is the user agent will always have "Chrome" whether it is the desktop or mobile version. So you have to check the more specific case first.
$(document).ready(function(){
var ua = navigator.userAgent;
if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i.test(ua))
$('a.mobile-other').show();
else if(/Chrome/i.test(ua))
$('a.chrome').show();
else
$('a.desktop-other').show();
});
Safe feature-based way for detecting Google Chrome with Javascript?
isChrome = function() {
return Boolean(window.chrome);
}
Related Topics
JavaScript Change Background Color on Click
HTML Mobile -Forcing the Soft Keyboard to Hide
How to Limit Options Selected in a HTML Select Box
Set Height of <Div> = to Height of Another <Div> Through .Css
Creating a CSS Class in Jquery
Wait for Background Images in CSS to Be Fully Loaded
Changed Id Not Being Found by Jquery
Jsfiddle: No Connection Between HTML and Js? Can't Call Simple Function from Button
Event When User Stops Scrolling
Detect Click Event Inside Iframe
"Scroll" to the Very Right of a Long Text Input
Convert CSS Width String to Regular Number
React Inline Style - Style Prop Expects a Mapping from Style Properties to Values, Not a String
How to Have Tabs Without JavaScript
IE8 V8 Not Changing Class for a Dom Element Despite Js Function Changing the Element Attribute