首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >服务器端浏览器检测?node.js

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

Stack Overflow用户
提问于 2011-05-29 01:47:06
回答 13查看 75.3K关注 0票数 69

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

谢谢。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-05-29 02:10:18

代码语言:javascript
复制
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];

这对你来说应该是可行的。只需将其放入您的响应处理程序中。

票数 91
EN

Stack Overflow用户

发布于 2011-09-30 01:09:24

node的ua-parser库(npm install ua-parser)公开了一大组浏览器用户代理字符串的正则表达式。我强烈建议您使用它来满足您的需求。

票数 29
EN

Stack Overflow用户

发布于 2014-01-01 04:44:21

这是我用ua-parser-js拼凑起来的。我相信它是可以改进的,但它是有功能的。

安装程序包:

代码语言:javascript
复制
sudo npm install ua-parser-js

在需要UAParser路由文件中:

代码语言:javascript
复制
var UAParser = require('ua-parser-js');

用它做一些事情:

代码语言:javascript
复制
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();
}

然后在你的路线中只需呼叫:

代码语言:javascript
复制
app.all(/^(?!(\/update)).*$/, ensureLatestBrowser);

如果您想了解使用UAParser还可以获得哪些其他信息,请查看他们的demo page.

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6163350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档