• 用js判断.net版本


    有时我们需要判断一下客户端已经安装的.net版本,比如在制作一个用.net开发的客户端程序的下载页面时,当然,用自带的打包部署程序制作的安装包可以在安装时自动判断,但如果客户端已经安装了.net,在下载时再下载一个包含有.net的安装包显示有些浪费了,这时我们就需要判断一下客户端是否安装了.net。

    在网上找了好久,虽然通过请求头信息可以判断,比如

    if (context.Request.Browser.ClrVersion == null || context.Request.Browser.ClrVersion.Major < 3)
    {
    context.Response.Redirect("setup_full.zip", true);
    }
    else
    {
    context.Response.Redirect("setup.zip", true);
    }

    但这个ClrVersion似乎只在ie8以下的ie浏览器中有效,到了ie9中这个判断就不起作用了,这时就只能通过js来判断,并把判断结果传到服务器。例如我们的程序是用.net3.0开发的,这时js的判断就如以下代码所示

              var a = navigator.userAgent;
    var b = a.substr(a.indexOf('('), a.lastIndexOf(')') - a.indexOf('(') - 1);
    var c;
    if (b.length > 0) {
    c = b.split(';');
    }
    var clr = 0;
    for (var i = 0; i < c.length; i++) {
    if (c[i].indexOf('.NET CLR 3.0') > -1) {
    clr = 1;
    break;
    }
    }
    document.write('<area shape="rect" coords="722,317,938,396" href="download.ashx?full=' + clr + '"/>');

    这样就可以根据判断结果来决定是否给客户下载包含有.net框架程序的安装包了

    以上在IE下没问题,但到了firefox下就不行了,因为这些浏览器并没有发送CLR版本信息,所以还要再判断一下这种情况,可以在后台代码里进行:

                if (string.IsNullOrEmpty(context.Request.QueryString["full"]) || context.Request.QueryString["full"] == "0")
    {//通过操作系统判断,很可能客户端浏览器没有发送CLR版本信息,比如firefox
    string info = context.Request.UserAgent.ToString();
    if (info.IndexOf("Windows NT 5") > 0)
    {
    if (info.IndexOf("NET CLR 3") > 0 || info.IndexOf("NET CLR 4") > 0)
    {
    context.Response.Redirect("setup.zip", true);
    }
    else
    {
    //操作系统可能尚未安装.Netframework
    //也有可能用户已经安装.Netframework,但是此时他们正在使用的浏览器没有发送CLR版本信息
    context.Response.Redirect("setup_full.zip", true);
    }
    }
    else if (info.IndexOf("Windows NT 6") > 0 || info.IndexOf("Windows NT 7") > 0)
    {
    context.Response.Redirect("setup.zip", true);
    }
    else
    {
    //不支持CLR的可能性很大,很有可能不属于WINDOWS系统,可以视为不支持
    context.Response.Redirect("setup_full.zip", true);
    }
    }
    else
    {
    context.Response.Redirect("setup.zip", true);
    }

    参考来源:http://www.haogongju.net/art/250463

  • 相关阅读:
    PHP写一段代码,确保多个进程同时写入一个文件成功
    PHP中的中文截取乱码问题_gb2312_utf-8
    TortoiseSVN使用详细步骤
    限制页面内部链接访问源-HTML注释
    Redis配置文件解读
    window下部署php_redis扩展
    js延迟加载,提升网页加载速度
    HTML5 LocalStorage 本地存储
    静态HTML页面不缓存js文件的方法
    寻找幸运数
  • 原文地址:https://www.cnblogs.com/meteortent/p/2342367.html
Copyright © 2020-2023  润新知