16

正如标题所述,我有兴趣找到一种基于安全功能(即,不使用 navigator.appName 或 navigator.appVersion)的方法来检测 Google Chrome。

我所说的基于特征的意思是,例如:

if(window.ActiveXObject) {
    // internet explorer!
}

编辑:正如已经指出的那样,这个问题没有多大意义(显然,如果你想实现一个特性,你测试它,如果你想检测一个特定的浏览器,你检查用户代理),对不起,现在是早上 5 点 ;) 让我这样说:是否有任何 JavaScript 对象和/或 Chrome 独有的功能...

4

11 回答 11

32
isChrome = function() {
    return Boolean(window.chrome);
}
于 2008-09-17T15:45:51.550 回答
9

这个答案非常过时,但在当时的石器时代非常相关。

我认为特征检测比 navigator.userAgent 解析更有用,因为我在这里搜索了Opera ambiguosity 。没有人知道 IE16 是否会解析 /MSIE 16.0;/ 正则表达式 - 但我们可以肯定,会有 document.all 支持。在现实生活中,这些特性通常是浏览器的同义词,例如:“No XMLHttpRequest?It is the f..d IE6!” 没有非IE浏览器支持document.all,但是像傲游这样的浏览器可以打乱userAgent。(当然脚本可以出于某种原因在Firefox中定义document.all,但它很容易控制。)因此我建议这个解决方案。

编辑 在这里我找到了完整的资源。

编辑 2我已经测试过 Opera 也支持 document.all !

var is = {
  ff: window.globalStorage,
  ie: document.all && !window.opera,
  ie6: !window.XMLHttpRequest,
  ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera,
  ie8: document.documentMode==8,
  opera: Boolean(window.opera),
  chrome: Boolean(window.chrome),
  safari: window.getComputedStyle && !window.globalStorage && !window.opera
}

使用很简单:

if(is.ie6) { ... }
于 2010-05-18T06:43:24.447 回答
4

不完全是问题的答案......但如果您试图检测特定的浏览器品牌,那么功能检查的意义就有点丢失了。我非常怀疑任何其他浏览器都在使用 Chrome userAgent 字符串,所以如果你的问题是“这个浏览器是 Chrome”,你应该看看那个。(顺便说一句,window.ActiveXObject 不保证 IE,有其他浏览器的插件提供此对象。哪种说明了我试图提出的观点。)

于 2008-09-17T08:27:22.087 回答
4

对于所有的标准纳粹...有时您可能想要使用不只是标准的出血“标准技术”,但它们将是...例如 css3 功能。

这就是我找到这个页面的原因。

出于某种原因,Safari 可以很好地运行边框半径与框阴影的组合,但 chrome 无法正确呈现组合。因此,即使是 webkit 禁用组合,找到一种检测 chrome 的方法也会很好。

我遇到了数百个理由来检测特定的浏览器/版本,这通常最终会放弃一个很酷的功能的想法,因为我想做的事情不受大恶魔的支持......

但有时,有些功能太酷了,即使它们还没有标准化,也不能使用它们。

于 2009-02-24T17:58:40.510 回答
1

因此,如果您接受 Marijn 的观点并兴趣通过 javascript 测试用户代理字符串:

var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

(归功于:http ://davidwalsh.name/detecting-google-chrome-javascript )


这是 chromes 用户代理字符串的一个非常好的分析/分解:http ://www.simonwhatley.co.uk/whats-in-google-chromes-user-agent-string

于 2008-09-17T08:38:20.157 回答
1

我经常使用行为/能力检测。在解决它之前直接检查浏览器是否支持功能,而不是根据浏览器的名称(用户代理)来解决它。

特定于浏览器的解决方法的一个问题是,您不知道该错误是否已修复或该功能现在是否受支持。当您进行功能检测时,您知道浏览器是否直接支持它,并且您不仅仅是浏览器专家。

http://diveintohtml5.ep.io/everything.html

于 2010-05-18T07:22:45.363 回答
0

您不应该专门检测 Chrome。如果有的话,您应该检测到 WebKit,因为就页面渲染而言,Chrome 的行为应该与其他 WebKit 浏览器(Safari、Epiphany)完全一样。

如果您不仅需要检测 WebKit,还需要准确了解正在使用的版本,请参阅此链接:http ://trac.webkit.org/wiki/DetectingWebKit

但是,正如上面其他人所说,您不应该检测浏览器,而应该检测功能。有关更多信息,请参阅此 ADC 文章:http: //developer.apple.com/internet/webcontent/objectdetection.html

于 2008-09-17T15:52:47.057 回答
0

您可能需要了解 Chrome 浏览器的原因之一是因为它“非常”符合标准。我已经遇到了我认为符合标准的旧 JavaScript 代码的问题(通过 FF 或 Opera 标准——这非常好),但 Chrome 更加挑剔。它迫使我重写一些代码,但有时使用 if(isChrome) { blah...blah ) 技巧可能更容易让它运行。Chrome 似乎运行良好(我支持标准合规性),但有时您只需要详细了解用户正在运行的内容。

此外,Chrome 的速度非常快。问题是,一些 JavaScript 代码无意中依赖于其他浏览器的缓慢才能正常工作,即:页面加载、iframe 加载、样式表链接的放置和页面头部中的 javascript 链接等。当函数真正可用时,这些可能会导致新问题与页面元素交互。所以现在,你真的可能需要知道...

于 2009-02-24T16:38:43.727 回答
0

我使用此代码为每个浏览器制作书签(或为 webkit 显示一条消息)

如果(window.sidebar){
// Mozilla Firefox 书签
window.sidebar.addPanel(title, url,"");
} else if( window.external ) { // IE 收藏夹
  如果(窗口。ActiveXObject){
  //IE
  window.external.AddFavorite(网址,标题);
  } 别的 {
  //铬合金
  alert('点击确定后按 ctrl+D 加入书签(Mac 为 Command+D)');
  }
} else if(window.opera && window.print) {
// 歌剧
  返回真;}
 否则 { //萨弗里
 alert('点击确定后按 ctrl+D 加入书签(Mac 为 Command+D)'); }

于 2009-03-26T16:46:34.177 回答
0

window.chrome由于歌剧也有对象,因此可能存在误报。作为我使用的一个很好的解决方案;

var isOpera = !!window.opera || !!window.opr;// Opera 8.0+

var isChrome = !!window.chrome && !isOpera;

这个解决方案几乎总是有效的。但是我发现的一件事是,在 iPad Chrome 版本 52.0 中以 return 的形式isChrome返回。falsewindow.chromefalse

于 2018-06-20T07:26:56.533 回答
-1

isIE: !!(!window.addEventListener && window.ActiveXObject),

isIE6: typeof document.createElement('DIV').style.maxHeight == "undefined",

isIE7: !!(!window.addEventListener && window.XMLHttpRequest && !document.querySelectorAll),

isIE8: !!(!window.addEventListener && document.querySelectorAll && document.documentMode == 8),

isGecko: navigator.product == 'Gecko',

isOpera: !!window.opera,

isChrome: !!window.chrome,

isWebkit: !!(!window.opera && !navigator.taintEnable && document.evaluate && navigator.product != 'Gecko'),

于 2010-07-07T17:39:58.087 回答