Большинство реализаций, которые я видел, предназначены для обнаружения браузеров на стороне клиента. Мне просто интересно, удалось ли обнаружить браузер, прежде чем отправлять какие-либо ресурсы клиенту.
Спасибо.
Большинство реализаций, которые я видел, предназначены для обнаружения браузеров на стороне клиента. Мне просто интересно, удалось ли обнаружить браузер, прежде чем отправлять какие-либо ресурсы клиенту.
Спасибо.
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];
Это должно сработать для вас. Просто поставьте его в обработчик ответа.
Библиотека ua-parser для node (npm install ua-parser
) предоставляет большой набор регулярных выражений для строк пользовательского агента браузера. Я настоятельно рекомендую его для ваших нужд.
Я выбросил это вместе, используя 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, просмотрите демонстрационную страницу .
Я хотел сделать простое перенаправление на мобильную версию своего сайта, поэтому агент-пользователь достаточно надежный. Я хотел сделать это на стороне сервера, поэтому я не тратил время на загрузку ненужных 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
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';
Если вы используете экспресс, вы можете легко проверить ua примерно так:
app.get('/ua', function(req, res){
res.send('user ' + req.headers['user-agent']);
});
Большинство браузеров предоставляют заголовок запроса HTTP, называемый "User-Agent". Это то же самое, что и свойство navigator.userAgent на стороне клиента.
Попробуйте этот код http://detectmobilebrowser.com/
Здесь еще один: https://github.com/koudelka/node-useragent_parser
Я недавно выпустил устройство-детектор-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.
Если вы хотите управлять мобильным устройством на уровне шаблонов, я просто написал для этого модуль. https://github.com/Fresheyeball/isMobile-node
Я улучшил код бит @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]);
};
Возможно, вам стоит взглянуть на Apache DeviceMap.
Библиотеки JavaScript из коробки больше на стороне клиента прямо сейчас, но многое будет работать на Node.JS или Angular аналогичным образом. В отличие от простого сопоставления образцов строк UA, DeviceMap поставляется с широким спектром устройств и семейств устройств в репозитории описания устройств (DDR) на основе стандартов W3C.
Мощный npm useragent. Useragent позволяет с высокой точностью анализировать строку агента пользователя, используя специально настроенные регулярные выражения для сопоставления в браузере. Эта база данных необходима для обеспечения правильного анализа каждого браузера, поскольку каждый поставщик браузеров реализует свою собственную схему пользовательского агента. Вот почему обычные парсеры пользовательских агентов имеют серьезные проблемы, потому что они, скорее всего, будут анализировать неправильное имя браузера или путать версию механизма рендеринга с реальной версией браузера.