0

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


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

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

背景:我正在使用 xmlhttp 请求受基本身份验证保护的页面。

我现在必须根据 v18 或 v19+ 采取不同的操作,因为谷歌在 v19 的 URL 中删除了嵌入的基本身份验证(请参阅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) ;
4

1 回答 1

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> 
于 2012-05-21T12:47:17.493 回答