关于浏览器:使用 Javascript 检测 Google Chrome 的基于安全功能的方法?

关于浏览器:使用 Javascript 检测 Google Chrome 的基于安全功能的方法?

Safe feature-based way for detecting Google Chrome with Javascript?

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

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

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

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


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

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

我认为特征检测比 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,但它很容易控制。)因此我建议这个解决方案。

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

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

1
2
3
4
5
6
7
8
9
10
var is = {
  ff: window.globalStorage,
  ie: document.almmp; !window.opera,
  ie6: !window.XMLHttpRequest,
  ie7: document.almmp; window.XMLHttpRequesmmp; !XDomainRequesmmp; !window.opera,
  ie8: document.documentMode==8,
  opera: Boolean(window.opera),
  chrome: Boolean(window.chrome),
  safari: window.getComputedStylmmp; !window.globalStoragmmp; !window.opera
}

使用很简单:

1
if(is.ie6) { ... }

对于所有的标准纳粹...有时您可能想要使用流血的"标准技术",这些技术还不是标准的,但它们将是...例如 css3 功能。

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

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

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

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


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


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

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

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


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

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

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

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


可能会有误报,因为opera 也有window.chrome 对象。作为我使用的一个很好的解决方案;

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

var isChrome = !!window.chrommmp; !isOpera;

这个解决方案几乎总是有效的。
然而我发现的一件事是,isChrome 在 iPad Chrome 版本 52.0 中返回 false,因为 window.chrome 返回 false


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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'); }


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

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


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

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

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


isIE: !!(!window.addEventListenemmp; window.ActiveXObject),

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

isIE7: !!(!window.addEventListenemmp; window.XMLHttpRequesmmp; !document.querySelectorAll),

isIE8: !!(!window.addEventListenemmp; document.querySelectorAlmmp; document.documentMode == 8),

isGecko: navigator.product == \\'Gecko\\',

isOpera: !!window.opera,

isChrome: !!window.chrome,

isWebkit: !!(!window.opermmp; !navigator.taintEnablmmp; document.evaluatmmp; navigator.product != \\'Gecko\\'),


推荐阅读

    linux系统的命令功能?

    linux系统的命令功能?,系统,管理,数字,地址,工作,环境,命令,第一,增长,信息,l

    linux磁盘检测命令?

    linux磁盘检测命令?,情况,系统,数据,检测,管理,信息,命令,磁盘,设备,单位,lin

    硬盘检测命令linux?

    硬盘检测命令linux?,信息,情况,系统,管理,数据,检测,百分比,命令,工具,设备,l

    linux性能检测命令?

    linux性能检测命令?,系统,情况,信息,状态,工具,实时,百分比,指标,分析,命令,

    linux下命令行浏览器?

    linux下命令行浏览器?,地址,传播,工具,网站,软件,发行,网址,首次,官网,系统,l

    浏览器调用linux命令?

    浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,

    浏览器调用linux命令?

    浏览器调用linux命令?,系统,信息,人工智能,软件,数据,首次,地址,代码,咨询,

    linux安装浏览器命令?

    linux安装浏览器命令?,官网,系统,平台,网站,管理,设备,咨询,工具,官方网站,

    linux使用命令的方法?

    linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,

    linux常用命令和功能?

    linux常用命令和功能?,工作,系统,管理,信息,命令,目录,网络,功能,常用命令,

    linux检测硬件的命令?

    linux检测硬件的命令?,信息,系统,检测,工具,第一,数据,设备,分析,实时,百度,

    linux命令超时检测?

    linux命令超时检测?,时间,网络,检测,系统,地址,状态,电脑,代码,软件,设备,lin

    linux启动浏览器命令?

    linux启动浏览器命令?,系统,情况,发行,不了,官网,环境,工具,传播,基础,软件,

    linux下端口检测命令?

    linux下端口检测命令?,检测,系统,状态,工具,情况,端口,网络,服务,灵活,信息,l

    linux命令功能ls?

    linux命令功能ls?,命令,文件,标准,工作,系统,观察,一致,目录,选项,清单,linux

    linux默认浏览器命令?

    linux默认浏览器命令?,环境,系统,发行,工程,工具,浏览器,软件,情况,网站,管

    linux命令下载浏览器?

    linux命令下载浏览器?,软件,系统,官网,网站,工具,名称,中心,密码,时间,设计,l

    linux命令关浏览器?

    linux命令关浏览器?,系统,工作,工具,咨询,信息,平台,官方网站,管理,数据,电

    linux检测摄像头命令?

    linux检测摄像头命令?,系统,工具,情况,实时,信息,状态,平均,设备,检测,数据,L

    linux检测进程命令?

    linux检测进程命令?,系统,服务,地址,状态,信息,检测,进程,命令,第一,软件,lin