服务器端浏览器检测?的node.js

fan*_*ncy 59 javascript browser browser-detection node.js

我见过的大多数实现都是在客户端进行浏览器检测.我只是想知道在向客户端发送任何资源之前是否可以进行浏览器检测.

谢谢.

McK*_*yla 82

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];
Run Code Online (Sandbox Code Playgroud)

这对你有用.把它放在你的响应处理程序中.

  • @float使用UA来检测浏览器是一个坏习惯而且不稳定.我建议你看一下CSS` @ media`属性中的委托,这样你就可以为移动和非移动设备提供不同的CSS. (5认同)

S M*_*S M 28

node()的ua-parsernpm install ua-parser为浏览器用户代理字符串公开了一大组正则表达式.我强烈推荐它以满足您的需求.


Don*_*ary 13

我用ua-parser-js把它扔在了一起.我相信它可以改进,但它的功能.

安装包:

sudo npm install ua-parser-js
Run Code Online (Sandbox Code Playgroud)

在您的路由文件中需要UAParser:

var UAParser = require('ua-parser-js');
Run Code Online (Sandbox Code Playgroud)

做一些事情:

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();
}
Run Code Online (Sandbox Code Playgroud)

然后在你的路线中只需致电:

app.all(/^(?!(\/update)).*$/, ensureLatestBrowser);
Run Code Online (Sandbox Code Playgroud)

如果您想查看UAParser可以获得的其他信息,请查看他们的演示页面.


Ove*_*289 5

我想做一个简单的重定向到我网站的移动版本,所以用户代理足够可靠。我想在服务器端做,所以我没有浪费时间在客户端加载不必要的 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
Run Code Online (Sandbox Code Playgroud)


Eti*_*tin 5

几个月前我发布了device-detector-js

它是 Matomo device-detector 的 TypeScript 端口,这是一个最初用 PHP 编写的强大的设备检测库。

它可以解析任何用户代理并检测浏览器、操作系统、使用的设备(桌面、平板电脑、手机、电视、汽车、控制台等)、品牌和型号。

安装

npm install device-detector-js
Run Code Online (Sandbox Code Playgroud)

示例- 简单的用户代理检测:

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);
Run Code Online (Sandbox Code Playgroud)

查看完整的 API 文档