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

76

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

谢谢。


这是2015年。现在是否有更全面的库之类的东西可用?我想要检测moz vs webkit vs ie。我还想检测移动设备 vs 桌面设备 vs 平板电脑。 - Muhammad Umer
可能是 https://www.npmjs.com/package/mobile-detect 或者 https://www.npmjs.com/package/express-device。 - Chaudhry Junaid
你认为我们需要使用这个包吗?https://www.npmjs.com/package/bowser - axel
17个回答

1

我有类似的需求,然后发现了这个名为detect-browser的节点包。

const { detect } = require('detect-browser');
const browser = detect();

if (browser) {
  console.log(browser.name);
  console.log(browser.version);
  console.log(browser.os);
}

如果您想执行与特定浏览器相关的任何操作,也可以像下面这样使用switch case。
const { detect } = require('detect-browser');
const browser = detect();

// handle the case where we don't detect the browser
switch (browser && browser.name) {
  case 'chrome':
  case 'firefox':
    console.log('supported');
    break;

  case 'edge':
    console.log('kinda ok');
    break;

  default:
    console.log('not supported');
}


1
强大的npm useragent。Useragent使用手工调整的专用正则表达式进行浏览器匹配,以高精度解析用户代理字符串。需要这个数据库来确保每个浏览器都被正确解析,因为每个浏览器供应商都实现了自己的用户代理模式。这就是为什么常规用户代理解析器存在重大问题的原因,因为它们很可能会解析出错误的浏览器名称,或将渲染引擎版本与实际浏览器版本混淆。

0

[这里是另一种变体或同化供您考虑。]

它更加通用且进一步简化。

您可以传递请求或任何具有“headers”属性的对象,或者它可以是headers属性,并且您可以选择任何标签在对象、headers或实际用户代理字符串本身上搜索参数。

它使用先前发布的Mobile和Table Checking Regex,并简单地返回该结果,但首先对输入进行净化,可以插入各种东西。

您甚至可以覆盖默认的正则表达式,可选地作为参数传递。{我将把这个进一步扩展留给有灵感的人。} 此外,如果在范围内等等,还可以有另一种默认为全局存储的请求中的用户代理的方法。

mobTabCheck: function( ua, lbl, rgx ) {  /* mobile tablet check; UserAgent or request, or any object with optional search label  */
    if( ua === und ) return false;
    if( ua !== und && ua.constructor !== String ) {
        if( lbl === und ) lbl = 'user-agent';
        if( ua.headers !== und ) ua = ua.headers[ lbl ];
        else ua = ua[ lbl ];
    }
    if( rgx === und ) rgx = /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/;
    if( rgx.constructor === String ) rgx = new RegExp( rgx );
    return rgx.test( ua );
}

这个正则表达式是从这里来的... https://gist.github.com/dalethedeveloper/1503252/931cc8b613aaa930ef92a4027916e6687d07feac

98%的解决方案。我不知道它是否像我的函数标题暗示的那样检查平板电脑。

实际上,这个函数的标题(和一些参数)应该改名为什么?...serachObjectForLabelThatMatchesThisRegex

除了所有默认的都使它成为一个单一参数用途的东西。

此外,我将函数设置为键值对中的一个键的值,您可以按照自己的喜好存储它,但如果您使用它,请保证不要使用 var 或 const。

let mobTabCheck = function() {};

0
你可能想要查看Apache DeviceMap
现在,JavaScript库的开箱即用更多地集中在客户端方面,但是很多东西也可以在Node.JS或Angular上以类似的方式工作。与UA字符串的简单模式匹配不同,DeviceMap基于W3C标准的设备描述存储库(DDR)提供了广泛的设备和设备系列。

0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接