我看到的大多数实现都是在客户端进行浏览器检测。我只是想知道在向客户端发送任何资源之前是否可能进行浏览器检测。
谢谢。
我看到的大多数实现都是在客户端进行浏览器检测。我只是想知道在向客户端发送任何资源之前是否可能进行浏览器检测。
谢谢。
我有类似的需求,然后发现了这个名为detect-browser的节点包。
const { detect } = require('detect-browser');
const browser = detect();
if (browser) {
console.log(browser.name);
console.log(browser.version);
console.log(browser.os);
}
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');
}
[这里是另一种变体或同化供您考虑。]
它更加通用且进一步简化。
您可以传递请求或任何具有“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() {};
针对设备、浏览器和操作系统的服务器检测,我建议使用https://www.npmjs.com/package/node-device-detector。
该工具支持客户端提示。