在不使用window.navigator.appVersion的情况下检测Chrome版本

时间:2012-05-21 12:10:30

标签: javascript google-chrome google-chrome-extension version


编辑:问题变得无关紧要,因为我发现setRequestHeader技术适用于v18和v19。 http://code.google.com/p/chromium/issues/detail?id=123150#c39上的海报似乎不正确,说这种方法在v18上不起作用 - 确实如此。当我被允许时,我会在8小时内用这个答案更新!


我使用的Chrome扩展程序是一种自动测试工具。它已覆盖用户代理(在启动chrome时通过命令行),因此我无法再使用appVersion查看chrome的版本。

还有其他方法可以在Javascript中检测Chrome版本吗?

背景:我使用xmlhttp来请求受Basic Auth保护的页面。

我现在必须采取不同的行动,具体取决于v18或v19 +,因为Google已在第19页的网址中删除了嵌入式基本身份验证(请参阅http://code.google.com/p/chromium/issues/detail?id=123150#c39)。

这是一个自动脚本,因此我不会在那里输入用户名或密码,但脚本都知道它们。

if (v18_or_earlier)
{
    xmlhttp.open("POST", url, true, http_basic_username, http_basic_password) ;
}
else //v19+
{
    xmlhttp.open("POST", get_upload_url(), true);
    var auth_header = "Basic " + Base64.encode(http_basic_username + ":" + http_basic_password) ;
    xmlhttp.setRequestHeader("Authorization", auth_header) ;
}
xmlhttp.send(post_body) ;

1 个答案:

答案 0 :(得分:0)

这样的事情会起作用吗?

<script>  
function chrome_version( version ) {  
  if ( version < 18) {  
    xmlhttp.open("POST", get_upload_url(), true);  
    var auth_header = "Basic " + Base64.encode(http_basic_username + ":" +   http_basic_password) ;  
    xmlhttp.setRequestHeader("Authorization", auth_header) ;  
  } else {  
  # Maybe do framebusting or...  
  xmlhttp.open("POST", url, true, http_basic_username, http_basic_password) ;  
  }     
}  
</script>  
<iframe src="http://user:pass@example.org"  
        onload="chrome_version(18)"  
        onerror="chrome_version(19)">  
</iframe>