【问题标题】:Detecting .NET version without UserAgent string检测没有 UserAgent 字符串的 .NET 版本
【发布时间】:2011-08-03 23:09:05
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这是朝着正确的方向前进:IE9、Chrome12 和 FF3.6 通过这种方法正确地发出 .NET 字符串。遗憾的是,FF4 没有。感谢您的建议。
    • 在我们的观察中,在IE9的所有兼容模式下,navigator.userAgent和UserAgent发送到服务器的头部都是完全相同的。 IE9模式下,.NET版本缺失。
    • 我可以确认,比在 IE9 中,console.log(navigator.userAgent); 返回所有框架版本。在 jsfiddle.net 上测试。
    【解决方案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”标头。没有什么比能够查看源代码来解开谜团更棒了!)

    【讨论】:

    • 这适用于 Firefox 插件“.NET Framework Assistant”,但不适用于 IE 9 和 IE 10
    【解决方案3】:

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

    【讨论】:

    • 难道不能创建一个 Silverlight 小部件来检测已安装的框架并通过 javascript 公开结果吗?
    • 假设他们安装了 Silverlight。有很多方法可以检测到它,但没有一种方法是万无一失的,而且都有各种失败场景。
    【解决方案4】:

    我解决这个问题的方法是发回一个响应标头,告诉浏览器以兼容的方式运行,然后在 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);
    

    【讨论】:

    • 感谢您的贡献,但我们的主要问题是较新的非 IE 浏览器不再在 userAgent 字符串中返回 .NET 版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2010-11-13
    • 2011-06-01
    • 1970-01-01
    • 2016-03-17
    相关资源
    最近更新 更多