2014-03-01 18:22:06 +00:00
## Bowser
2011-04-27 23:25:55 +00:00
A Browser detector. Because sometimes, there is no other way, and not even good modern browsers always provide good feature detection mechanisms.
2011-04-27 22:14:35 +00:00
2017-05-23 20:51:16 +00:00
[![Build Status ](https://travis-ci.org/lancedikson/bowser.svg?branch=master )](https://travis-ci.org/lancedikson/bowser)
2014-02-22 21:34:00 +00:00
2011-04-27 23:25:55 +00:00
So... it works like this:
2011-04-27 22:14:35 +00:00
2011-05-10 16:50:28 +00:00
``` js
if (bowser.msie & & bowser.version < = 6) {
alert('Hello China');
}
```
2011-04-27 22:14:35 +00:00
2016-05-06 18:29:22 +00:00
## 1.1.0 breaking changes
We don't save built script in the repo anymore. The main file (`src/bowser.js`) is available through NPM or Bower.
Also you can download minified file from [the release page ](https://github.com/ded/bowser/releases ).
2015-07-28 15:31:50 +00:00
## 1.0.0 breaking changes
2016-08-29 21:06:33 +00:00
`browser = require('bowser').browser;` becomes `bowser = require('bowser');`
2015-07-28 15:31:50 +00:00
2016-06-30 17:52:55 +00:00
---
## API
2017-02-15 11:39:15 +00:00
### bowser`:Object`
2016-06-30 17:52:55 +00:00
Use it to get object with detected flags of your current browser.
### bowser._detect(ua `:String`)`:Object`
Use it to get object with detected flags from User Agent string.
2016-07-26 11:05:51 +00:00
### bowser.check(minVersions`:Object`, strictMode`:Boolean`, [ua]`:String`)`:Boolean`
2016-09-16 05:10:45 +00:00
Use it to check if browser is supported. In default non-strict mode any browser family not present in `minVersions` will pass the check (like Chrome in the third call in the sample bellow). When strict mode is enabled then any not specified browser family in `minVersions` will cause `check` to return `false` (in the sample it is the fourth call, the last one).
2016-06-30 17:52:55 +00:00
2016-08-29 09:59:58 +00:00
``` js
/**
* in case of using IE10
*/
2016-08-29 21:06:33 +00:00
bowser.check({msie: "11"}); // true
bowser.check({msie: "9.0"}); // false
2016-08-29 09:59:58 +00:00
/**
* specific user agent
*/
2016-10-31 09:12:12 +00:00
bowser.check({chrome: "45"}, window.navigator.userAgent); // true
2016-08-29 09:59:58 +00:00
/**
* but false in strict mode
*/
2016-10-31 09:12:12 +00:00
bowser.check({chrome: "45"}, true, window.navigator.userAgent); // false
2016-06-30 17:52:55 +00:00
```
### bowser.compareVersions(versions`:Array<String>`)`:Number`
Use it to compare two versions.
2016-08-29 09:59:58 +00:00
``` js
2016-08-25 12:01:03 +00:00
bowser.compareVersions(['9.0', '10']);
2016-06-30 17:52:55 +00:00
// -1
```
### bowser.isUnsupportedBrowser(minVersions`:Object`, [strictMode]`:Boolean`, [ua]`:string`)`:Boolean`
Use it to check if browser is unsupported.
2016-08-29 09:59:58 +00:00
``` js
2016-08-25 12:01:03 +00:00
bowser.isUnsupportedBrowser({msie: "10"}, window.navigator.userAgent);
2016-06-30 17:52:55 +00:00
// true / false
```
See more examples in [tests ](test/test.js ).
---
2015-11-06 17:52:11 +00:00
## Bowser Flags
Your mileage may vary, but these flags should be set. See Contributing below.
2011-04-27 22:14:35 +00:00
2015-11-06 17:52:11 +00:00
``` js
alert('Hello ' + bowser.name + ' ' + bowser.version);
```
### All detected browsers
These flags are set for all detected browsers:
* `name` - A human readable name for this browser. E.g. 'Chrome', ''
* `version` - Version number for the browser. E.g. '32.0'
2015-11-06 17:58:50 +00:00
For unknown browsers, Bowser makes a best guess from the UA string. So, these may not be set.
2015-11-06 17:52:11 +00:00
2016-04-16 15:48:53 +00:00
### Rendering engine flags
2015-11-06 17:52:11 +00:00
If detected, one of these flags may be set to true:
2016-05-09 07:24:55 +00:00
* `webkit` - Chrome 0-27, Android < 4.4 , iOs , BB , etc .
* `blink` - Chrome >=28, Android >=4.4, Opera, etc.
2015-11-06 17:52:11 +00:00
* `gecko` - Firefox, etc.
* `msie` - IE < = 11
* `msedge` - IE > 11
Safari, Chrome and some other minor browsers will report that they have `webkit` engines.
Firefox and Seamonkey will report that they have `gecko` engines.
``` js
if (bowser.webkit) {
// do stuff with safari & chrome & opera & android & blackberry & webos & silk
}
```
### Device flags
If detected, one of these flags may be set to true:
* `mobile` - All detected mobile OSes are additionally flagged `mobile` , **unless it's a tablet**
2015-11-06 17:58:50 +00:00
* `tablet` - If a tablet device is detected, the flag `tablet` is **set instead of `mobile`** .
2015-11-06 17:52:11 +00:00
2015-11-06 17:58:50 +00:00
### Browser flags
2016-04-16 15:48:53 +00:00
If detected, one of these flags may be set to true. The rendering engine flag is shown in []'s:
2015-11-06 17:52:11 +00:00
2016-05-09 07:24:55 +00:00
* `chrome` - [`webkit`|`blink`]
2017-12-20 19:47:03 +00:00
* `chromium` - [`webkit`|`blink`]
2015-11-06 17:52:11 +00:00
* `firefox` - [`gecko`]
2014-02-24 00:16:33 +00:00
* `msie`
2015-05-16 01:02:18 +00:00
* `msedge`
2015-11-06 17:52:11 +00:00
* `safari` - [`webkit`]
2016-05-09 07:24:55 +00:00
* `android` - native browser - [`webkit`|`blink`]
2015-11-06 17:58:50 +00:00
* `ios` - native browser - [`webkit`]
2016-05-09 07:24:55 +00:00
* `opera` - [`blink` if >=15]
2016-08-29 21:18:27 +00:00
* `samsungBrowser` - [`blink`]
2015-11-06 17:52:11 +00:00
* `phantom` - [`webkit`]
2015-11-06 17:58:50 +00:00
* `blackberry` - native browser - [`webkit`]
* `webos` - native browser - [`webkit`]
* `silk` - Amazon Kindle browser - [`webkit`]
2015-11-06 17:52:11 +00:00
* `bada` - [`webkit`]
* `tizen` - [`webkit`]
* `seamonkey` - [`gecko`]
* `sailfish` - [`gecko`]
2016-04-16 15:48:53 +00:00
* `ucbrowser` — [`webkit`]
* `qupzilla` — [`webkit`]
2016-05-09 07:24:55 +00:00
* `vivaldi` — [`blink`]
2016-05-09 07:18:11 +00:00
* `sleipnir` — [`blink`]
* `kMeleon` — [`gecko`]
2018-04-18 08:26:42 +00:00
* `Whale` — [`blink`]
2014-02-24 00:16:33 +00:00
2014-02-24 00:25:48 +00:00
For all detected browsers the browser version is set in the `version` field.
2015-11-06 17:52:11 +00:00
### OS Flags
If detected, one of these flags may be set to true:
2014-02-21 14:09:58 +00:00
2015-10-09 05:02:36 +00:00
* `mac`
2015-11-06 17:52:11 +00:00
* `windows` - other than Windows Phone
* `windowsphone`
* `linux` - other than `android` , `chromeos` , `webos` , `tizen` , and `sailfish`
2015-10-09 05:02:36 +00:00
* `chromeos`
2014-02-24 00:16:33 +00:00
* `android`
2015-11-06 17:52:11 +00:00
* `ios` - also sets one of `iphone` /`ipad`/`ipod`
2014-02-24 00:16:33 +00:00
* `blackberry`
* `firefoxos`
2015-11-06 17:52:11 +00:00
* `webos` - may also set `touchpad`
2014-02-24 23:47:02 +00:00
* `bada`
2014-02-25 00:48:35 +00:00
* `tizen`
2014-02-28 18:53:50 +00:00
* `sailfish`
2014-02-21 14:09:58 +00:00
2017-09-28 16:36:58 +00:00
`osname` and `osversion` may also be set:
2014-02-21 14:09:58 +00:00
2017-09-28 16:36:58 +00:00
* `osname` - for the OS flags detected above: macOS, Windows, Windows Phone, Linux, Chrome OS, Android, iOS, Blackberry OS, Firefox OS, WebOS, Bada, Tizen, Sailfish OS, and Xbox
2017-05-17 21:45:04 +00:00
* `osversion` - for Android, iOS, MacOS, Windows, Windows Phone, WebOS, Bada, and Tizen. If included in UA string.
2011-04-27 22:14:35 +00:00
2015-11-06 17:52:11 +00:00
iOS is always reported as `ios` and additionally as `iphone` /`ipad`/`ipod`, whichever one matches best.
If WebOS device is an HP TouchPad the flag `touchpad` is additionally set.
2011-04-27 22:14:35 +00:00
2015-11-06 17:52:11 +00:00
### Browser capability grading
2015-11-06 17:58:50 +00:00
One of these flags may be set:
2015-11-06 17:52:11 +00:00
* `a` - This browser has full capabilities
* `c` - This browser has degraded capabilities. Serve simpler version
* `x` - This browser has minimal capabilities and is probably not well detected.
2015-11-06 17:58:50 +00:00
There is no `b` . For unknown browsers, none of these flags may be set.
2011-04-27 22:14:35 +00:00
2014-03-01 18:22:06 +00:00
### Ender Support
2011-04-27 22:14:35 +00:00
2014-03-01 18:22:06 +00:00
`package.json`
2011-04-27 22:14:35 +00:00
2014-03-01 18:22:06 +00:00
``` json
"dependencies": {
"bowser": "x.x.x"
}
```
2011-04-27 22:14:35 +00:00
2011-05-10 16:50:28 +00:00
``` js
2014-03-01 18:22:06 +00:00
if (require('bowser').chrome) {
alert('Hello Silicon Valley')
2011-05-10 16:50:28 +00:00
}
```
2014-03-01 18:22:06 +00:00
### Contributing
If you'd like to contribute a change to bowser, modify the files in `src/` , then run the following (you'll need node + npm installed):
2013-12-13 12:17:10 +00:00
2014-03-01 18:22:06 +00:00
``` sh
$ npm install
$ make test
```
2013-12-13 12:17:10 +00:00
2014-03-01 18:22:06 +00:00
Please do not check-in the built files `bowser.js` and `bowser.min.js` in pull requests.
2013-12-13 12:17:10 +00:00
2014-03-01 18:22:06 +00:00
### Adding tests
See the list in `src/useragents.js` with example user agents and their expected bowser object.
2013-12-13 12:17:10 +00:00
Whenever you add support for new browsers or notice a bug / mismatch, please update the list and
check if all tests are still passing.
2015-07-26 01:55:21 +00:00
2017-01-26 16:20:10 +00:00
### Similar Projects
* [Kong ](https://github.com/BigBadBleuCheese/Kong ) - A C# port of Bowser.
2015-07-26 01:55:21 +00:00
### License
Licensed as MIT. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.