Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/wilddeer/sniffer

browser/engine/os/device detection tool
https://github.com/wilddeer/sniffer

javascript sniffer

Last synced: 1 day ago
JSON representation

browser/engine/os/device detection tool

Awesome Lists containing this project

README

        

# Sniffer

Sniffer is a browser/engine/os/device detection tool. Works both in a browser and with Node.

[Live demo](http://wilddeer.github.io/Sniffer/test/demo.htm) (tests your browser UA string)

[Test suite](http://wilddeer.github.io/Sniffer/test/test.htm)

## You have three options:

### 1. Default Sniffer build

Get *sniffer.js* from [dist/](https://github.com/wilddeer/Sniffer/tree/master/dist). Drop the script tag in the ``:

```js

```

It will run automatically, collect the information on current device/os/browser and put the results in `window.Sniff` object (or expose it via `module.exports`, if available). See [“Detection results”](#detection-results) for details. Now you can do horrible things:

```js
if (Sniff.os.name=='android' &&
Sniff.os.majorVersion &&
Sniff.os.majorVersion < 3 &&
!Sniff.browser.name &&
Sniff.browser.engine=='webkit') {
//looks like default Android 2.x browser!
myMagicOverflowScrollPolyfill();
}
```

It will also add browser name shortcode, browser engine shortcode, OS name shortcode and device features’ shortcodes to `` tag’s className, so you can alter the styles accordingly (pretty much the Modernizr way):

```css
/* contrast colors for monochrome devices */
html.bw body {
color: black;
background: white;
}

/* make sure code snippets are readable in Opera Mini */
html.operamini pre code {
white-space: pre-wrap;
}
```

### 2. Sniffer module

Get *sniffer.module.js* from [dist/](https://github.com/wilddeer/Sniffer/tree/master/dist). It exposes Sniffer function into global scope or via `module.exports`, if available. Compatible with Node. Just feed it a user agent string:

```js
Sniffer(userAgent);
```

It will return detection result, see [“Detection results”](#detection-results) for details.

Also available via npm: `npm install snifferjs`.

### 3. Pure Sniffer function

Get *sniffer.pure.js* from [dist/](https://github.com/wilddeer/Sniffer/tree/master/dist). It contains pure Sniffer function (no wrap, no autolaunch, no css classes, no exports), you decide how to use it.

## Detection results

Sniffer returns an object which looks like this:

```js
{
browser: {
fullName: String, // full human readable name
name: String, // shortcode
version: String, // semantic version, up to three parts (major.minor.patch)
majorVersion: Number,
minorVersion: Number,
patchVersion: Number,
engine: String // shortcode
},
os: {
fullName: String, // full human readable name
name: String, // shortcode
version: String, // semantic version, up to three parts (major.minor.patch)
versionName: String, // human readable version name, e.g. 'Vista', 'Mavericks', etc.
versionAltNames: Array, // possible alternatives, e.g. Windows NT 5.2 can be 'XP' or 'Server 2003'
majorVersion: Number,
minorVersion: Number,
patchVersion: Number
},
features: {
bw: Boolean, /* black and white (e-book readers) */
mobile: Boolean, /* includes phones, tablets, e-book readers, portable game consoles, etc. */
tv: Boolean, /* smart tv */
proxy: Boolean /* serverside js & rendering, like in Opera Mini */
}
}
```

## Detects

Class names/shortcodes in square brackets.

**Browsers:**

- **Chrome** *[chrome]*
- **Firefox** *[firefox]*
- **IE** *[ie]*
- **Edge** *[edge]*
- **Safari** *[safari]*
- **Opera** *[opera]*
- **Opera Mini** *[operamini]*
- **Opera Coast** *[coast]*
- **Nokia Browser** *[nokiabrowser]* (!= Nokia Xpress) — Symbian Belle phones
- **Ovi Browser** a.k.a **Nokia Xpress** *[ovi]* — Nokia Asha, Series40 & Series60 phones, etc.
- **Sailfish Browser** *[sailfishbrowser]*

**Engines:**

- **WebKit** *[webkit]*
- **Gecko** *[gecko]*
- **Trident** *[trident]*
- **Presto** *[presto]*
- **EdgeHTML** *[edgehtml]*

**OS/Devices:**

- **Windows** *[win]*
- **Mac OS X** *[osx]*
- **Ubuntu** *[ubuntu]*
- **Fedora** *[fedora]*
- **Windows Phone** *[winphone]*
- **Android** *[android]*
- **iOS** *[ios]*
- **BlackBerry** *[blackberry]*
- **Sailfish OS** *[sailfish]*
- **Symbian** *[symbian]*
- **Kindle** *[kindle]* (Kindle Fire should be detected as Android)
- **PlayStation** *[playstation]*
- **PlayStation Vita** *[psvita]*
- **Nintendo DSi** *[dsi]*
- **Nintendo 3DS** *[3ds]*
- **New Nintendo 3DS** *[n3ds]*
- **Viera** *[viera]* (Panasonic Viera smart tv)

**Features:**

- **Black and white** *[bw]*
- **Mobile** *[mobile]*
- **TV** *[tv]*
- **Proxy broswer** (serverside rendering) *[proxy]*

## License

[MIT license](http://opensource.org/licenses/MIT).

Have fun, lads.