我知道浏览器检测永远不会100%可靠,因为用户代理标头总是可以伪造的,但是,我并不为此烦恼。
虽然关于这个主题有很多问题,但它们似乎都很老了,所以为了得到最新的答案,我觉得我应该再问这个问题。
我目前正在使用PHP browscap检测浏览器名称和版本服务器端,然后将名称和版本返回到javascript变量(这不是一个非常好的方法)。我之所以需要这样做只是为了向访问者显示一条消息,如果他们没有使用支持的浏览器。
当前的方法(类似的东西):
<script type="text/javascript">
var browser = new Array();
browser['browser'] = '<?php echo $browser_name; ?>';
browser['version'] = '<?php echo $browser_version; ?>';
browser['error'] = '<?php echo $browser_error; ?>';
</script>
做这个客户端会好得多,因为browscap可能会非常慢,并且它会阻止我将值传递给PHP中的javascript变量。 如果您认为使用PHP是一种更好的方法,请在答案中说明,这只是我的意见。
因此,我的问题很简单,以下链接是确定浏览器名称和版本的可靠方法吗?
我知道需要添加新的浏览器,这不会让我感到烦恼。我更关心使用的算法是否可靠。
提前致谢
更新1
要了解我的意思,请查看Internet Explorer 7或更低版本中的https://www.icloud.com/。您将收到一条消息,指出浏览器不受支持。这很容易为IE做,因为你可以简单地使用<!--[if gt IE...
,但是,我需要测试所有的浏览器。
答案 0 :(得分:1)
这看起来不对,您可以从Javascript中获取浏览器信息。不需要混合使用JS和PHP代码来实现这一点。
您可以执行以下操作来获取并使用JavaScript检测用户浏览器:
var userAgent = navigator.userAgent.toLowerCase();
var old = false;
// Internet Explorer 7
if (userAgent.indexOf('msie 7.0b') !== -1) { old = true; }
else if (userAgent.indexOf('msie 7.0') !== -1) { old = true; }
// Internet Explorer 6
else if (userAgent.indexOf('msie 6.1') !== -1) { old = true; }
else if (userAgent.indexOf('msie 6.01') !== -1) { old = true; }
else if (userAgent.indexOf('msie 6.0b') !== -1) { old = true; }
else if (userAgent.indexOf('msie 6.0') !== -1) { old = true; }
...
// Detect any other browser versions you consider old
if(old = true) {
// Show notification and alert users that they are using old browser
}
这是使用JS的方法,但您也可以使用HTML来实现这一目标:
<!--[if lte IE 6]>
// include your .css style or do whatever you want to alert users their browser is old
<![endif]-->
您的问题的简短答案是肯定的,以您的方式检测用户浏览器是错误的,因为您可以使用纯JavaScript,甚至HTML。这里不需要混合PHP和JS代码,最后,PHP和JS都将获得相同的UserAgent信息。
答案 1 :(得分:1)
经过广泛的研究和其他开发人员的讨论后,显然没有可靠的方法从用户代理检索浏览器名称和版本。这有以下几个原因:
虽然我非常不鼓励使用这些脚本,因为他们可能会在任何时候发布任何浏览器的更新时停止工作,如果您希望在 Javascript 中检测浏览器名称和版本,那么我会建议使用这个脚本:
但是,最可靠的检索浏览器细节的方法毫无疑问是由Gary Keith提供的browscap
。 browscap
项目提供有关从用户代理收集的每个浏览器和操作系统的详细信息。它易于实现,甚至更易于使用。要了解更多信息,请查看:
如果您选择使用Gary Keith的browscap
,则需要确保至少每周更新一次。
虽然我对此答案自相矛盾,但显然不建议使用任何类型的脚本检测浏览器信息。唯一可靠的浏览器检测方法是Internet Explorer HTML条件,如上所述,这些方法仅涵盖Internet Explorer。
尽量避免浏览器特定的功能和通知,并使用内置功能,例如:
media="only screen and (device-width: 768px)"
和
<!--[if IE 8]>I am IE 8<![endif]-->
答案 2 :(得分:1)
这个问题需要更新的答案。我认为最近客户端检测的最佳选择是WURFL。
它是一个基于Useragents的更新设备库 - 想想客户端的Browscap。
加载JS并根据请求js的设备返回JSON。完美!
<script type="text/javascript" src="//wurfl.io/wurfl.js"></script>
因为它在WURFL服务器端进行解析,所以需要远程加载js而不是将其保存在目录树中。
超级简单
WURFL.is_mobile
就是确定移动设备所需的全部内容。
祝你好运。答案 3 :(得分:0)
您可以尝试查看navigator.appName
和navigator.userAgent
。
答案 4 :(得分:0)
yepnopejs IE detection (!ie prefixes)使用MS条件评论。
一个简短的片段,用于在JavaScript中检测IE10之前的IE版本,而无需借助用户代理嗅探。
while (
div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->'
);
// …
https://github.com/SlexAxton/yepnope.js/blob/master/prefixes/yepnope.ie-prefix.js
yepnope用法示例:
yepnope({
load: ['normal.js', 'ie6!ie7!ie-patch.js'] // patch for ie6 or ie7 only
});
答案 5 :(得分:-1)
您可以使用完美的插件来获取用jQuery编写的信息(如javascript)
看看这个链接:
https://github.com/jquery/plugins.jquery.com
当您想要确定浏览器中是否有某个功能,应用错误修正等时,请务必进行功能检测而不是浏览器检测。