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
|
|
|
|
2014-02-22 21:34:00 +00:00
|
|
|
[![bowser ci](https://secure.travis-ci.org/ded/bowser.png)](https://travis-ci.org/ded/bowser/)
|
|
|
|
|
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
|
|
|
|
|
|
|
|
### bowser()`:Object`
|
|
|
|
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-06-30 17:52:55 +00:00
|
|
|
Use it to check if browser supported.
|
|
|
|
|
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-08-29 21:06:33 +00:00
|
|
|
bowser.check({chrome: 45}, window.navigator.userAgent); // true
|
2016-08-29 09:59:58 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* but false in strict mode
|
|
|
|
*/
|
2016-08-29 21:06:33 +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`]
|
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]
|
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`]
|
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
|
|
|
|
2015-11-06 17:52:11 +00:00
|
|
|
`osversion` may also be set:
|
2014-02-21 14:09:58 +00:00
|
|
|
|
2015-11-06 17:52:11 +00:00
|
|
|
* `osversion` - for Android, iOS, 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
|
|
|
|
|
|
|
### License
|
|
|
|
Licensed as MIT. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.
|