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
2015-07-28 15:31:50 +00:00
## 1.0.0 breaking changes
`browser = require('bowser').browser;` becomes `browser = require('bowser');`
2014-03-01 18:22:06 +00:00
## Flags set for detected Browsers[Engines]
2011-04-27 22:14:35 +00:00
2014-02-24 00:16:33 +00:00
* `chrome` [`webkit`]
* `firefox` [`gecko`]
* `msie`
2015-05-16 01:02:18 +00:00
* `msedge`
2014-02-24 00:16:33 +00:00
* Android native browser as `android` [`webkit`]
* iOS native browser as `ios` [`webkit`]
* `opera` [`webkit` if >12]
2015-07-17 16:53:21 +00:00
* `phantom` [`webkit`]
2014-02-24 00:16:33 +00:00
* `safari` [`webkit`]
* `seamonkey` [`gecko`]
* BlackBerry native browser as `blackberry` [`webkit`]
* WebOS native browser as `webos` [`webkit`]
2014-02-24 00:19:41 +00:00
* Amazon Kindle browser as `silk` [`webkit`]
2014-02-24 23:47:02 +00:00
* Bada browser as `bada` [`webkit`]
2014-02-25 00:48:35 +00:00
* Tizen browser as `tizen` [`webkit`]
2014-02-28 18:53:50 +00:00
* Sailfish browser as `sailfish` [`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.
2014-03-01 18:22:06 +00:00
## Flags set for detected mobile Operating Systems
2014-02-21 14:09:58 +00:00
2014-02-24 00:16:33 +00:00
* `android`
* Windows Phone as `windowsphone`
* `ios` (`iphone`/`ipad`/`ipod`)
* `blackberry`
* `firefoxos`
2014-02-24 22:07:20 +00:00
* `webos` (`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
2014-02-25 00:48:35 +00:00
Android, iOS, Windows Phone, WebOS, Bada, and Tizen will all report the OS version number if it is contained in the UA string in the `osversion` field. 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.
2014-02-21 14:09:58 +00:00
2014-02-24 23:47:02 +00:00
All detected mobile OSes are additionally flagged `mobile` , **if they are not powering a tablet device** . If a tablet device is detected, the flag `tablet` is set instead.
2011-04-27 22:14:35 +00:00
2014-03-01 18:22:06 +00:00
### Notes
2014-02-21 14:09:58 +00:00
Safari, Chrome and some other minor browsers will report that they have `webkit` engines, Firefox and Seamonkey will report that they have `gecko` engines.
2011-04-27 22:14:35 +00:00
2011-05-10 16:50:28 +00:00
``` js
if (bowser.webkit) {
2014-02-24 00:22:07 +00:00
// do stuff with safari & chrome & opera & android & blackberry & webos & silk
2011-05-10 16:50:28 +00:00
}
```
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
### Graded Browser Support
2011-05-10 16:50:28 +00:00
``` js
if (bowser.a) {
// support full feature set
}
else if (bowser.c) {
// serve degraded version
}
else {
// unsupported (bowser.x)
2013-12-13 12:17:10 +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.