大多数现代浏览器(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”)
答案 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);