【发布时间】:2014-02-18 22:12:12
【问题描述】:
检测某人的浏览器及其版本号的可靠方法是什么?据我所见,JavaScript 中的 navigator 对象之类的东西根本无法达到这个目的,而且我遇到的很多这些真正被破解的解决方案也没有。我遇到的一两个当前功能 JavaScript 代码 sn-ps 会告诉我是否有人在使用 Firefox、Chrome 等,但它们没有描述每个浏览器的版本号。如何找到它,如何可靠地完成它? (前端是几个 Flex 应用程序。)
编辑
这个问题与一个非常相似的问题相关联,建议我应该能够在那里使用答案。我不能;由于未知原因,它不起作用。在我之前的编辑中,在此下方,我发布的第一个示例来自另一个问题。请删除此链接。谢谢。
编辑
我知道这个问题已被问过一百万次,但我遇到的答案,包括 Stack Overflow 上接受的答案,要么不起作用,要么效果不够好,无法使用。这就是为什么我要强调“可靠”这个词。阻碍的一件事是,在许多代码 sn-ps 中,您会看到“Netscape”出现而不是“Internet Explorer”等。
例如,“Internet Explorer 11”、“Firefox 26”等。或者至少是类似的东西。
以下是一些效果不佳的代码 sn-ps 示例:
流行,但我尝试时它不会运行:
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”并不是我想要的。 JavaScript 中的navigator 对象在这类事情上存在很多问题。
【问题讨论】:
-
Detect version of browser 的可能重复项
-
它可靠吗?浏览器可以发送它(甚至可能是用户)想要的任何字符串。
-
如果它可以在至少 Chrome、Firefox 和 IE(希望 Safari 和 Opera)的远程现代版本中运行,那就足够了。不过可能仍然很复杂。
-
你提到你发现的一些东西不起作用,还有一些工作。你需要展示什么实际上不工作,什么是工作。否则你会让人推荐你已经尝试过的东西(就像第一个评论者所做的那样)。
标签: javascript asp.net browser actionscript scripting