Обнаружение браузера на стороне сервера? node.js - программирование
Подтвердить что ты не робот

Обнаружение браузера на стороне сервера? node.js

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

Спасибо.

4b9b3361

Ответ 1

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];

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

Ответ 2

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

Ответ 3

Я выбросил это вместе, используя 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

Я хотел сделать простое перенаправление на мобильную версию своего сайта, поэтому агент-пользователь достаточно надежный. Я хотел сделать это на стороне сервера, поэтому я не тратил время на загрузку ненужных 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

Ответ 5

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';

Ответ 6

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

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

Ответ 7

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

Ответ 10

Я недавно выпустил устройство-детектор-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.

Ответ 11

Если вы хотите управлять мобильным устройством на уровне шаблонов, я просто написал для этого модуль. https://github.com/Fresheyeball/isMobile-node

Ответ 12

Я улучшил код бит @duck5auce, чтобы быть действительно полезным и поддерживать IE 10-12 (Edge).

var getDevice = function(ua) {
    var $ = {active: false, subactive: false};

    if (/mobile/i.test(ua)) {
        $.active = 'mobile';
        $.Mobile = true;
    }

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

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

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

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

    if (/Windows NT/.test(ua)) {
        $.active = 'IE';
        $.IE = /Windows NT ([0-9\._]+)[\);]/.exec(ua)[1];
    }
    if (/MSIE/.test(ua)) {
        $.active = 'IE';
        $.IE = /MSIE ([0-9]+[\.0-9]*)/.exec(ua)[1];
    }
    if (/Trident/.test(ua)) {
        $.active = 'IE';
        $.IE = /Trident\/.*rv:([0-9]+[\.0-9]*)/.exec(ua)[1];
    }
    if (/Edge\/\d+/.test(ua)) {
        $.active = 'IE Edge';
        $.IE = /Edge\/(\d+)/.exec(ua)[1];
    }

    return $.active + ' ' + $[$.active] + ($.subactive && ' ' + $.subactive + ' ' + $[$.subactive]);
};

Ответ 13

Возможно, вам стоит взглянуть на Apache DeviceMap.

Библиотеки JavaScript из коробки больше на стороне клиента прямо сейчас, но многое будет работать на Node.JS или Angular аналогичным образом. В отличие от простого сопоставления образцов строк UA, DeviceMap поставляется с широким спектром устройств и семейств устройств в репозитории описания устройств (DDR) на основе стандартов W3C.

Ответ 14

Мощный npm useragent. Useragent позволяет с высокой точностью анализировать строку агента пользователя, используя специально настроенные регулярные выражения для сопоставления в браузере. Эта база данных необходима для обеспечения правильного анализа каждого браузера, поскольку каждый поставщик браузеров реализует свою собственную схему пользовательского агента. Вот почему обычные парсеры пользовательских агентов имеют серьезные проблемы, потому что они, скорее всего, будут анализировать неправильное имя браузера или путать версию механизма рендеринга с реальной версией браузера.