使用Javascript检测基于Google Chrome的安全功能吗?

时间:2020-03-05 18:58:16  来源:igfitidea点击:

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

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

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

编辑:正如已经指出的那样,这个问题没有多大意义(很显然,如果我们想实现某个功能,请对其进行测试,如果我们想检测特定的浏览器,请检查该用户代理),对不起,现在是凌晨5点;)让我这样说:没有Chrome特有的JavaScript对象和/或者功能吗?

解决方案

回答

并非完全是问题的答案...但是,如果我们尝试检测特定的浏览器品牌,则功能检查的点有点丢失。我非常怀疑其他浏览器是否在使用Chrome userAgent字符串,因此,如果问题是"此浏览器是Chrome",则应该看看。 (顺便说一句,window.ActiveXObject不能保证IE,也有其他浏览器的插件提供此对象。哪种方式说明了我试图提出的观点。)

回答

因此,如果我们接受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

回答

isChrome = function() {
    return Boolean(window.chrome);
}

回答

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

如果我们不仅需要检测WebKit,而且还需要确切了解正在使用的版本,请参阅以下链接:http://trac.webkit.org/wiki/DetectingWebKit

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

回答

我们可能需要知道浏览器是Chrome的原因之一是因为它"非常"符合标准。我已经遇到了旧的JavaScript代码问题,我认为这些代码符合标准(通过FF或者Opera标准相当不错),但是Chrome更加挑剔。它迫使我重写一些代码,但有时使用if(isChrome){blah ... blah)技巧来使其运行可能会更容易。 Chrome似乎运行良好(我符合标准要求),但有时我们只需要了解用户正在运行的详细信息即可。

而且,Chrome浏览器非常快。问题是,某些JavaScript代码无意间依赖于其他浏览器的正常运行速度,例如:页面加载,iframe加载,样式表链接和javascript链接在页面头部的放置等。这些会在功能真正可用时引起新的问题与页面元素进行交互。所以就目前而言,我们可能真的需要知道...

回答

对于所有标准的纳粹……有时我们可能想要使用不只是标准的出血性"标准技术",但它们将成为……例如css3功能。

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

出于某些原因,Safari可以很好地运行带有框阴影的border-radius组合,但是chrome无法正确呈现该组合。因此,即使是禁用组合的webkit,也很可能找到一种检测chrome的方法。

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

但是有时候,即使尚未标准化,某些功能也太酷了,无法使用。

回答

我使用此代码为每个浏览器制作书签(或者显示Webkit的消息)

if (window.sidebar) { 
// Mozilla Firefox Bookmark
window.sidebar.addPanel(title, url,"");
} else if( window.external ) { // IE Favorite
  if(window.ActiveXObject) {
  //ie
  window.external.AddFavorite( url, title);
  } else {
  //chrome
  alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok');
  }
} else if(window.opera && window.print) { 
// Opera
  return true; }
 else { //safri
 alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok'); }

回答

这个答案已经很过时了,但是在石器时代就已经非常重要了。

我认为功能检测比navigator.userAgent解析有用,因为我在这里搜索了Opera的歧义。没人知道IE16是否会解析/ MSIE 16.0; / regexp,但是我们可以肯定的是,将会有document.all支持。在现实生活中,这些功能通常是浏览器的同义词,例如:"没有XMLHttpRequest?这是f .... d IE6!"
没有任何非IE浏览器支持document.all,但是某些浏览器(例如Maxthon)可以对userAgent进行加扰。 (当然,出于某种原因,脚本可以在Firefox中定义document.all,但是可以轻松控制。)因此,我建议使用此解决方案。

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

编辑2我已经测试过该文件。Opera也支持所有文件!

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) { ... }

回答

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

特定于浏览器的解决方法存在一个问题,即我们不知道该错误是否已修复或者现在是否支持该功能。在进行功能检测时,我们会知道浏览器直接支持或者不支持它,而不仅仅是浏览器。

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

回答

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.taint启用&& document.evaluate && navigator.product!='Gecko'),