7

大多数现代浏览器(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 框架支持?

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

4

4 回答 4

4

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

于 2011-04-18T09:02:06.047 回答
2

此问题已由 Microsoft 修复。.NET 版本现在作为 HTTP 请求标头“X-ClickOnceSupport”返回。

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

print getenv('HTTP_X_CLICKONCESUPPORT');

在 Perl 中

print $ENV{HTTP_X_CLICKONCESUPPORT};

根据这个答案,在 JavaScript 中是不可能的。

(这一切都是从检查 Firefox .NET 助手的代码开始的,这让我搜索了“X-ClickOnceSupport”标头。没有什么比能够查看源代码来解开谜团了!)

于 2011-09-26T21:00:54.123 回答
1

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

于 2011-04-12T14:51:40.143 回答
1

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

页面代码隐藏:

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);
于 2011-11-01T20:05:25.537 回答