76 votes

détection de navigateur côté serveur? node.js

La plupart des implémentations que j'ai vues concernent la détection du navigateur côté client. Je me demandais simplement s'il était possible de détecter le navigateur avant d'envoyer des ressources au client.

Merci.

93voto

tylermwashburn Points 2879
 var ua = request.headers['user-agent'],
    $ = {};

if (/mobile/i.test(ua))
    $.Mobile = true;

if (/like Mac OS X/.test(ua)) {
    $.iOS = /CPU( iPhone)? OS ([0-9\._]+) like Mac OS X/.exec(ua)[2].replace(/_/g, '.');
    $.iPhone = /iPhone/.test(ua);
    $.iPad = /iPad/.test(ua);
}

if (/Android/.test(ua))
    $.Android = /Android ([0-9\.]+)[\);]/.exec(ua)[1];

if (/webOS\//.test(ua))
    $.webOS = /webOS\/([0-9\.]+)[\);]/.exec(ua)[1];

if (/(Intel|PPC) Mac OS X/.test(ua))
    $.Mac = /(Intel|PPC) Mac OS X ?([0-9\._]*)[\)\;]/.exec(ua)[2].replace(/_/g, '.') || true;

if (/Windows NT/.test(ua))
    $.Windows = /Windows NT ([0-9\._]+)[\);]/.exec(ua)[1];
 

Cela devrait fonctionner pour vous. Mettez-le simplement dans votre gestionnaire de réponses.

31voto

Sebastian Motraghi Points 2468

La bibliothèque ua-parser pour le nœud ( npm install ua-parser ) expose un grand ensemble d'expressions régulières pour les chaînes d'agent utilisateur du navigateur. Je le recommande fortement pour vos besoins.

18voto

Duck5auce Points 498

J'ai jeté cet ensemble à l'aide de l'ua-parser-js. Je suis sûr qu'il peut être amélioré, mais il est fonctionnel.

Installez le paquet:

sudo npm install ua-parser-js

Dans votre fichier de routes nécessitent UAParser:

var UAParser = require('ua-parser-js');

Faire des trucs avec elle:

function ensureLatestBrowser(req, res, next) {
  var parser = new UAParser();
  var ua = req.headers['user-agent'];
  var browserName = parser.setUA(ua).getBrowser().name;
  var fullBrowserVersion = parser.setUA(ua).getBrowser().version;
  var browserVersion = fullBrowserVersion.split(".",1).toString();
  var browserVersionNumber = Number(browserVersion);

  if (browserName == 'IE' && browserVersion <= 9)
    res.redirect('/update/');
  else if (browserName == 'Firefox' && browserVersion <= 24)
    res.redirect('/update/');
  else if (browserName == 'Chrome' && browserVersion <= 29)
    res.redirect('/update/');
  else if (browserName == 'Canary' && browserVersion <= 32)
    res.redirect('/update/');
  else if (browserName == 'Safari' && browserVersion <= 5)
    res.redirect('/update/');
  else if (browserName == 'Opera' && browserVersion <= 16)
    res.redirect('/update/');
  else
    return next();
}

et puis dans votre parcours d'appel:

app.all(/^(?!(\/update)).*$/, ensureLatestBrowser);

Si vous voulez voir ce que les autres informations que vous pouvez obtenir avec UAParser découvrez leur page de démonstration.

5voto

Bryant Williams Points 71

Je voulais faire une simple redirection vers une version mobile de mon site, si l'agent utilisateur est assez fiable. Je voulais le faire côté serveur, donc je ne perds pas de temps de chargement inutile de css et de js sur le client. http://detectmobilebrowsers.com/ avait le plus robuste regex de match. Donc, j'ai jeté quelques exprimer middleware qui vous permettra de faire de la redirection de par le simple ajout de deux lignes de code à votre application.

npm install detectmobilebrowsers installer

express = require 'express'
mobile  = require 'detectmobilebrowsers'

app = express()
app.configure () ->
  app.use mobile.redirect 'http://m.domain.com'
app.get '/', (req, res) ->
  res.send 'Not on Mobile'
app.listen 3000

2voto

BHBH Points 129

si vous utilisez express, vous pouvez facilement vérifier l'interface utilisateur avec quelque chose comme ceci:

 app.get('/ua', function(req, res){
    res.send('user ' + req.headers['user-agent']);
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X