我有一个PHP的Web应用程序,在前端需要一些更现代的浏览器功能,如MutationObserver。如网站上所述,只有非常新的浏览器支持此功能。对于我需要依赖的一些HTML5功能也是如此。
我现在想要实现的是,使用UserAgent-String检查服务器端用户正在运行哪个浏览器,如果它低于特定版本,则将其重定向到信息页面,在那里他被告知他应该使用更新的浏览器。
我现在已经尝试了一段时间来设置适当的Regex-Expressions来检查UA字符串。但是,由于浏览器制造商并不总是保持一个干净的架构,我陷入了一点困境 - 例如让我们说一个Opera-Browser我需要最低版本12。
同样跟踪相同的浏览器和版本很棘手,如Opera 12.14的两个示例所示:要么是“Version / 12.14”,要么是“Opera 12.14”或其他一些非常“随机”的字符串。对于其他浏览器,问题非常相似。
所以问题是:你将如何进行?
方法1:
useragentstring.com有一个API,我可以在每次用户访问欢迎页面和/或登录时查询。我不确定这是否是安全性和的好主意应用程序性能。
方法2:
PHP的get_browser()函数与browscap.ini一起使用。此方法无法区分桌面和移动浏览器。
方法3:
方法2的替代方法可以是phpbrowscap,您可以在其中定义自己的browsercap.ini,而不依赖于您无权访问的服务器上某处的browscap.ini。
或任何其他方法?
我很乐意发表一些意见。
答案 0 :(得分:4)
现在,许多开发人员使用JavaScript来查询浏览器中是否有可用的功能,而不是保留自己的用户代理和功能数据库,而这些数据库很难正确使用,并且很难保持更新。
Modernizr JavaScript library使这个相对简单。 This article更深入地探讨了为什么这种方法是一个好主意,并且如果你不想依赖一个库,它会显示一些替代方法来进行特征检测。
答案 1 :(得分:1)
为什么要在服务器上执行所有操作?使用javascript browser或object detection并使用javascript向用户显示消息。
答案 2 :(得分:0)
我过去曾使用过这个小曲目(摘录):
var browsers = [{
browser : "Opera",
css : "o",
engine : "Presto",
rex : {
eng : /(?:Gecko|Presto)\/([0-9.]*)/,
brw : /.+(?:Opera|Version).([0-9\.]+)/
},
ever : 0,
bver : 0
},{}]
var UA = function(p_ua) {
var curr, i;
for (i in browsers) {
var r = new RegExp(browsers[i].browser);
if (p_ua.match(r) && (!!browsers[i].rex)) {
curr = browsers[i];
curr.ever = curr.rex.eng.exec(p_ua)[1] || curr.rex.eng.exec(p_ua)[0];
curr.bver = curr.rex.brw.exec(p_ua)[1] || curr.rex.brw.exec(p_ua)[0];
break;
}
}
return curr;
}
(见jsfiddle)。它并不完整,但它足以满足我当时的需求。在类似的东西之外,客户端上的功能检测绝对是要走的路 - 无论是css,html还是javascript(即http://www.sitepoint.com/detect-css3-property-browser-support/,还是1/3)。我喜欢使用正则表达式 - 但浏览器供应商不能依赖于从版本到版本保持UA字符串相同(更不用说遵循实际标准了!请参阅:useragentstring.com/pages/useragentstring.php).