检测客户端浏览器及其版本号的可靠方法是什么?

坦克危机

检测某人的浏览器及其版本号可靠方法是什么从我所看到的情况来看,像navigatorJavaScript中对象之类的东西根本无法达到这个目的,我遇到的许多这些真正被黑在一起的解决方案也没有。我遇到过一两个目前可以正常运行的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”并不是我要找的东西。navigatorJavaScript中对象在这类事情上有很多问题。

Xotic750

没有可靠的方法来执行浏览器嗅探我最好的建议是看看WhoBrowser-强大的功能http://html5test.com/

每个人都在说谎—众议院议员

这是一个极其复杂且几乎完全无用的浏览器嗅探库。没有用,因为您不应该使用浏览器嗅探。因此,请立即停止,然后阅读一些有关特征检测的信息。我是认真的。走开。待会儿我会谢谢你的。

但是,为什么几乎完全没有用,而不是完全没有用?

好吧,规则总是有例外的。进行浏览器嗅探有一个正当的理由:收集有关您的网站上使用了哪些浏览器的情报。我的网站是html5test.com,我想知道哪个分数属于哪个浏览器。为此,您需要一个浏览器嗅探库。

为什么它极其复杂?

因为每个人都说谎。严重的是,没有一个浏览器是完全真实的。几乎所有浏览器都说它们是Netscape 5,几乎所有WebKit浏览器都说它们基于Gecko。现在,甚至Internet Explorer 11都不再声称是IE,而是像Gecko这样的未命名浏览器。而且情况变得更糟。这就是为什么它很复杂。

该库的主要部分在服务器上运行,并查看浏览器发送的标头,但它也从浏览器本身收集各种数据。它首先查看的是用户代理标头,但还有许多标头包含有关浏览器身份的线索。服务器找到浏览器的身份后,便会查看来自浏览器本身的数据并检查一些其他特征,并尝试确定标头是否在可能的位置。然后,它给您结果。

安装/要求说明

如何安装

将文件放在服务器上的目录中。服务器应该能够处理PHP,并且包含一个.htaccess文件,该文件指示服务器也使用PHP来解析detect.js文件。这是必需的,如果您的服务器不支持.htaccess文件,则需要找到一种使服务器执行相同操作的方法。

帮助您使其在IIS而不是apache上运行的说明

将.htaccess内容转换为IIS web.config

如果您可以在IIS上运行它,则可能需要发布一些有关如何实现此目的的进一步说明。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在javascript中检测操作系统,浏览器和版本号的广泛解决方案是什么?

来自分类Dev

Java Applet使用Chrome浏览器启动客户端程序的替代方法是什么?

来自分类Dev

Windows中客户端计算机的默认浏览器是什么?

来自分类Dev

从文件中匹配版本号的最佳方法是什么

来自分类Dev

获取客户端中的iOS通用框架版本号

来自分类Dev

如何检测是否使用Android浏览器或Android本机WebView客户端

来自分类Dev

如何检测并可能忽略处理不良/挂起的客户端浏览器请求

来自分类Dev

检测是否通过浏览器 js 安装了电报客户端

来自分类Dev

如何检测 - 是否在客户端 Web 浏览器中启用了 webstorage?

来自分类Dev

检测 InternetExplorerDriver 是否正在从客户端 JavaScript 控制浏览器

来自分类Dev

有什么方法可以纯粹从浏览器客户端获得对此JSON feed的访问权吗?

来自分类Dev

获取Chrome浏览器的最新发行版本号

来自分类Dev

为什么MYSQL循环冻结了客户端浏览器?

来自分类Dev

Firefox或Chrome浏览器的SOAP客户端扩展

来自分类Dev

Amazon SNS:通知浏览器客户端?

来自分类Dev

没有浏览器的Java Websocket客户端

来自分类Dev

过滤客户端证书(如浏览器)

来自分类Dev

从客户端Web浏览器与串行端口通信。

来自分类Dev

如何获取客户端的浏览器信息?

来自分类Dev

浏览器不应用客户端证书:403.7

来自分类Dev

在谷歌浏览器中获取客户端名称

来自分类Dev

浏览器不读取客户端证书

来自分类Dev

在Blazor Webassembly /客户端应用中获得浏览器文化的更好方法

来自分类Dev

从node.js客户端到浏览器客户端的socket.emit

来自分类Dev

Java客户端和浏览器客户端之间的响应代码变化

来自分类Dev

支持浏览器客户端和本机客户端之间的交互

来自分类Dev

在服务器端可靠地检测本地客户端

来自分类Dev

将数据从HTTP服务器端推送到浏览器客户端的最佳方法

来自分类Dev

如何在Spring MVC中获取确切的客户端浏览器名称和版本?

Related 相关文章

  1. 1

    在javascript中检测操作系统,浏览器和版本号的广泛解决方案是什么?

  2. 2

    Java Applet使用Chrome浏览器启动客户端程序的替代方法是什么?

  3. 3

    Windows中客户端计算机的默认浏览器是什么?

  4. 4

    从文件中匹配版本号的最佳方法是什么

  5. 5

    获取客户端中的iOS通用框架版本号

  6. 6

    如何检测是否使用Android浏览器或Android本机WebView客户端

  7. 7

    如何检测并可能忽略处理不良/挂起的客户端浏览器请求

  8. 8

    检测是否通过浏览器 js 安装了电报客户端

  9. 9

    如何检测 - 是否在客户端 Web 浏览器中启用了 webstorage?

  10. 10

    检测 InternetExplorerDriver 是否正在从客户端 JavaScript 控制浏览器

  11. 11

    有什么方法可以纯粹从浏览器客户端获得对此JSON feed的访问权吗?

  12. 12

    获取Chrome浏览器的最新发行版本号

  13. 13

    为什么MYSQL循环冻结了客户端浏览器?

  14. 14

    Firefox或Chrome浏览器的SOAP客户端扩展

  15. 15

    Amazon SNS:通知浏览器客户端?

  16. 16

    没有浏览器的Java Websocket客户端

  17. 17

    过滤客户端证书(如浏览器)

  18. 18

    从客户端Web浏览器与串行端口通信。

  19. 19

    如何获取客户端的浏览器信息?

  20. 20

    浏览器不应用客户端证书:403.7

  21. 21

    在谷歌浏览器中获取客户端名称

  22. 22

    浏览器不读取客户端证书

  23. 23

    在Blazor Webassembly /客户端应用中获得浏览器文化的更好方法

  24. 24

    从node.js客户端到浏览器客户端的socket.emit

  25. 25

    Java客户端和浏览器客户端之间的响应代码变化

  26. 26

    支持浏览器客户端和本机客户端之间的交互

  27. 27

    在服务器端可靠地检测本地客户端

  28. 28

    将数据从HTTP服务器端推送到浏览器客户端的最佳方法

  29. 29

    如何在Spring MVC中获取确切的客户端浏览器名称和版本?

热门标签

归档