обнаружение браузера на стороне сервера? Node.js - PullRequest
56 голосов
/ 28 мая 2011

Большинство реализаций, которые я видел, предназначены для обнаружения браузера на стороне клиента. Мне просто интересно, можно ли было сделать обнаружение браузера перед отправкой каких-либо ресурсов клиенту.

Спасибо.

Ответы [ 15 ]

80 голосов
/ 28 мая 2011
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];

Это должно сработать для вас. Просто поместите его в свой обработчик ответа.

28 голосов
/ 29 сентября 2011

Библиотека ua-parser для узла (npm install ua-parser) предоставляет большой набор регулярных выражений для строк пользовательского агента браузера. Я настоятельно рекомендую его для ваших нужд.

13 голосов
/ 01 января 2014

Я скинул это вместе, используя ua-parser-js .Я уверен, что это можно улучшить, но это функционально.

Установите пакет:

sudo npm install ua-parser-js

В вашем файле маршрутов требуется UAParser:

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

Сделайте некоторые вещис ним:

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();
}

и затем в своем маршруте просто позвоните:

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

Если вы хотите узнать, какую другую информацию вы можете получить с UAParser, посмотрите их демонстрационную страницу .

4 голосов
/ 01 августа 2013
ua = request.headers['user-agent'];
if( /firefox/i.test(ua) )
  browser = 'firefox';
else if( /chrome/i.test(ua) )
  browser = 'chrome';
else if( /safari/i.test(ua) )
  browser = 'safari';
else if( /msie/i.test(ua) )
  browser = 'msie';
else
  browser = 'unknown';
4 голосов
/ 13 августа 2012

Я хотел сделать простое перенаправление на мобильную версию моего сайта, чтобы пользовательский агент был достаточно надежным. Я хотел сделать это на стороне сервера, чтобы не тратить время на загрузку ненужных css и js на клиенте. У http://detectmobilebrowsers.com/ было самое надежное регулярное выражение. Поэтому я собрал некоторое промежуточное программное обеспечение, которое позволит вам выполнить перенаправление, просто добавив две строки кода в ваше приложение.

npm install detectmobilebrowsers для установки

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
2 голосов
/ 28 апреля 2012

если вы используете экспресс, вы можете легко проверить ua примерно так:

app.get('/ua', function(req, res){
    res.send('user ' + req.headers['user-agent']);
});
1 голос
/ 11 декабря 2018

Я недавно выпустил устройство-детектор-js пару месяцев назад.

Это порт TypeScript устройства Matomo для обнаружения устройств, мощной библиотеки обнаружения устройств, изначально написанной на PHP.

Он может анализировать любой пользовательский агент и определять браузер, операционную систему, используемое устройство (рабочий стол, планшет, мобильный телефон, телевизор, автомобили, консоль и т. Д.), Марку и модель.

Он тщательно протестирован и использует более 6000 тестов для обнаружения тысяч различных устройств.

Установка

npm install device-detector-js

Пример - обнаружение простого пользовательского агента:

const DeviceDetector = require("device-detector-js");

const deviceDetector = new DeviceDetector();
const userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36";
const device = deviceDetector.parse(userAgent);

console.log(device);

Ознакомьтесь с полной документацией по API .

1 голос
/ 11 февраля 2012
1 голос
/ 15 июля 2011

Попробуйте этот код http://detectmobilebrowser.com/

1 голос
/ 28 мая 2011

Большинство браузеров предоставляют заголовок HTTP-запроса под названием «User-Agent». Это то же самое, что и свойство navigator.userAgent на стороне клиента.

...