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

Jas*_*pio 7 .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框架支持?

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

Sta*_*mes 2

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

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

print getenv('HTTP_X_CLICKONCESUPPORT');
Run Code Online (Sandbox Code Playgroud)

在 Perl 中

print $ENV{HTTP_X_CLICKONCESUPPORT};
Run Code Online (Sandbox Code Playgroud)

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

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