检测某人的浏览器及其版本号的可靠方法是什么?从我所看到的情况来看,像navigator
JavaScript中的对象之类的东西根本无法达到这个目的,我遇到的许多这些真正被黑在一起的解决方案也没有。我遇到过一两个目前可以正常运行的JavaScript代码段,它们可以告诉我是否有人在使用Firefox,Chrome等,但是它们没有描述每个浏览器的版本号。如何找到它,如何可靠地完成它?(前端是几个Flex应用程序。)
编辑
这个问题与一个非常相似的问题相关,建议我应该可以在那里使用答案。我不能 由于未知原因,它不起作用。在我先前的编辑中,下面的一个是我发布的第一个示例,它来自另一个问题。请删除此链接。谢谢。
编辑
我知道这个问题已经被问了一百万遍了,但是我遇到的答案,包括Stack Overflow上被接受的答案,要么都不起作用,要么就不能很好地使用。这就是为什么我要强调“可靠”一词。遇到的一件事是,在许多代码片段中,您将看到出现“ Netscape”而不是“ Internet Explorer”等。
例如,“ Internet Explorer 11”,“ Firefox 26”等。或者至少与之接近。
以下是一些代码片段示例,这些示例效果不太理想:
受欢迎,但是当我尝试时它不会运行:
navigator.sayswho= (function(){
var ua= navigator.userAgent, tem,
M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*([\d\.]+)/i) || [];
if(/trident/i.test(M[1])){
tem= /\brv[ :]+(\d+(\.\d+)?)/g.exec(ua) || [];
return 'IE '+(tem[1] || '');
}
M= M[2]? [M[1], M[2]]:[navigator.appName, navigator.appVersion, '-?'];
if((tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
return M.join(' ');
})();
在Firefox上可以很好地工作,但是说IE是Netscape,在描述版本时会给出非常复杂的结果:
function get_browser(){
var N=navigator.appName, ua=navigator.userAgent, tem;
var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
return M[0];
}
function get_browser_version(){
var N=navigator.appName, ua=navigator.userAgent, tem;
var M=ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
M=M? [M[1], M[2]]: [N, navigator.appVersion, '-?'];
return M[1];
}
alert(get_browser())
alert(get_browser_version())
这几乎是我所需要的;只要它不需要任何最新版本,那么我也只需要版本号:
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Opera 8.0+ (UA detection to detect Blink/v8-powered Opera)
var isFirefox = typeof InstallTrigger !== 'undefined'; // Firefox 1.0+
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
// At least Safari 3+: "[object HTMLElementConstructor]"
var isChrome = !!window.chrome && !isOpera; // Chrome 1+
var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6
可以返回字符串的东西,例如:
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
IE11或将Firefox和IE称为“ Netscape”并不是我要找的东西。navigator
JavaScript中的对象在这类事情上有很多问题。
没有可靠的方法来执行浏览器嗅探。我最好的建议是看看WhoBrowser-强大的功能http://html5test.com/
每个人都在说谎—众议院议员
这是一个极其复杂且几乎完全无用的浏览器嗅探库。没有用,因为您不应该使用浏览器嗅探。因此,请立即停止,然后阅读一些有关特征检测的信息。我是认真的。走开。待会儿我会谢谢你的。
但是,为什么几乎完全没有用,而不是完全没有用?
好吧,规则总是有例外的。进行浏览器嗅探有一个正当的理由:收集有关您的网站上使用了哪些浏览器的情报。我的网站是html5test.com,我想知道哪个分数属于哪个浏览器。为此,您需要一个浏览器嗅探库。
为什么它极其复杂?
因为每个人都说谎。严重的是,没有一个浏览器是完全真实的。几乎所有浏览器都说它们是Netscape 5,几乎所有WebKit浏览器都说它们基于Gecko。现在,甚至Internet Explorer 11都不再声称是IE,而是像Gecko这样的未命名浏览器。而且情况变得更糟。这就是为什么它很复杂。
该库的主要部分在服务器上运行,并查看浏览器发送的标头,但它也从浏览器本身收集各种数据。它首先查看的是用户代理标头,但还有许多标头包含有关浏览器身份的线索。服务器找到浏览器的身份后,便会查看来自浏览器本身的数据并检查一些其他特征,并尝试确定标头是否在可能的位置。然后,它给您结果。
安装/要求说明
如何安装
将文件放在服务器上的目录中。服务器应该能够处理PHP,并且包含一个.htaccess文件,该文件指示服务器也使用PHP来解析detect.js文件。这是必需的,如果您的服务器不支持.htaccess文件,则需要找到一种使服务器执行相同操作的方法。
帮助您使其在IIS而不是apache上运行的说明
如果您可以在IIS上运行它,则可能需要发布一些有关如何实现此目的的进一步说明。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句