检测不带UserAgent字符串的.NET版本

时间:2011-04-12 14:35:15

标签: .net clickonce user-agent version-detection

大多数现代浏览器(Chrome 10,Firefox 4,IE9)都在缩短其UserAgent标识符。因此,支持的.NET版本不再发送到服务器。

为了让我们的客户能够使用我们的ClickOnce应用程序,我们需要知道客户端支持哪些框架。

Chrome和Firefox ClickOnce帮助程序的Javascript检测是一个开始(这些在Firefox 4中已经失败),但我们不再能够检测客户端是否安装了.NET 2.0,3.5或4.0。

除了从UserAgent字符串检测Windows平台和推断最可能的框架(XP = 1.1,Vista = 2.0,Win7 = 3.5)之外,我们如何检测.NET框架支持?< / p>

(我们希望阻止.application文件下载,因为我们的大多数客户似乎都没有注意到下载“pop-unders”)

4 个答案:

答案 0 :(得分:4)

navigator.userAgent至少在IE9上为您提供扩展的UA字符串

答案 1 :(得分:2)

这个问题是fixed by Microsoft。 .NET版本现在作为HTTP请求标头“X-ClickOnceSupport”返回。

在PHP中,您可以通过getenv()

获得此信息
print getenv('HTTP_X_CLICKONCESUPPORT');

在Perl中

print $ENV{HTTP_X_CLICKONCESUPPORT};

根据this answer,在JavaScript中无法实现。

(这一切都是通过检查Firefox .NET助手的代码开始的,这导致我搜索“X-ClickOnceSupport”标题。没有什么比能够查看源代码来解开一个谜!)

答案 2 :(得分:1)

我没有办法做到这一点。如果浏览器没有告诉您的服务器安装了哪些框架,那么您没有任何其他方法可以找到。

答案 3 :(得分:1)

我解决这个问题的方法是发回一个响应头,告诉浏览器兼容性,然后在navigator.userAgent上用javascript检测框架版本。

Page Code-behind:

Response.Headers.Add("X-UA-Compatible", "IE=7");

页面上的Javascript

// js to detect .net 3.5
// if it evaluates to true, then the user has .NET 3.5 installed
alert(navigator.userAgent.search(/\.NET.*?3\.5[\.\da-z]*?;/i) > -1);