自动更新作用


Posted in Javascript onOctober 08, 2006
function CLASS_AUTOUPDATE(instanceName,win) 
{ 
    this.instanceName    = instanceName; 
    this.updating        = false; 
    this.error            = false; 
    this.updateInfo        = ""; 
    this.nextVersion    = ""; 
    this.ver            = ""; 
    this.win            = win; 
    this.updatePath        = ""; 
    this.updateFileName = ""; 
    this.softName        = ""; 
    this.refresh(); } 
CLASS_AUTOUPDATE.prototype.onafterupdate = function() 
{ 
    var _window                = this.win; 
    var tempMessageWidth    = 360; 
    var tempMessageHeight    = 160; 
    var tempMessageLeft        = (document.body.clientWidth - tempMessageWidth) /2; 
    var tempMessageTop        = (document.body.clientHeight - tempMessageHeight) /2; 
    var feature = { 
        title:"更新完毕", 
        width:tempMessageWidth, 
        height:tempMessageHeight, 
        left:tempMessageLeft, 
        top:tempMessageTop, 
        borderColor:"#8B89A1", 
        backgroundColor:"#FFFFFF", 
        color:"#000000", 
        titleBackgroundColor:"#8B89A1", 
        titleColor:"#FFFFFF", 
        dragable:true 
    }; 
    var THIS = this; 
    var tempMessageContent    = []; 
    //tempMessageContent[tempMessageContent.length] = "<div style='font-size:12px;padding:5px'>"; 
    tempMessageContent[tempMessageContent.length] = this.updateInfo; 
    //tempMessageContent[tempMessageContent.length] = "<br/><br/>"; 
    tempMessageContent[tempMessageContent.length] = "<div align=center><span class='bt'><input type='button' value=' OK ' class='bt' id='bt_update_ok'></span></div>"; 
    tempMessageContent[tempMessageContent.length] = "</div>"; 
    _window.open("updateOk",feature); 
    _window.write("updateOk",tempMessageContent.join(""),false); 
    _window.items["updateOk"].all("bt_update_ok").onclick = function() 
                                                            {                                                                 
                                                                _window.close("updateOk");                                                                 
                                                            } 
    _window.items["updateOk"].onunload =    function() 
                                            {                                                 
                                                if(THIS.error==false&&THIS.updateFileList.length>0) 
                                                { 
                                                    document.location.reload(); 
                                                } 
                                            } 
} 
CLASS_AUTOUPDATE.prototype.check = function() 
{ 
    var _current_version,_new_version,_exist_new_ver; 

    //检查配置文件 
    var configXML = new CLASS_XML("xml\\autoupdate.xml"); 
    if(configXML.error==false) 
    { 
        var _update_date,_autoupdate_day,_current_version; 
        var _save_or_not; 
        var _d  = new Date(); 
        var _dd = _d.getFullYear() + "-" + (_d.getMonth()+1) + "-" + _d.getDate(); 
        //检查是否有更新时间段设置 
        if(configXML.selectSingleNode("/Config/UpdateDate")==null) 
        { 
            configXML.setText("/Config","UpdateDate", _dd); 
            _update_date = _dd; 
            _save_or_not = true; 
        } 
        else 
        { 
            _update_date = configXML.getText("/Config","UpdateDate", "1900-01-01"); 
        } 
        if(configXML.selectSingleNode("/Config/AutoUpdateDay")==null) 
        { 
            configXML.setText("/Config","AutoUpdateDay", "10"); 
            _autoupdate_day = "10"; 
            _save_or_not = true; 
        } 
        else 
        { 
            _autoupdate_day = configXML.getText("/Config","AutoUpdateDay", "10"); 
        } 
        _autoupdate_day = _autoupdate_day *1; 
        if(configXML.selectSingleNode("/Config/CurrentVersion")==null) 
        { 
            configXML.setText("/Config","CurrentVersion", "0.32"); 
            _current_version = "0.32"; 
            _save_or_not = true; 
        } 
        else 
        { 
            _current_version = configXML.getText("/Config","CurrentVersion", "0.32"); 
        } 
        _current_version = _current_version * 1; 

        //判断是否今天去连接服务器 
        var _od = new Date(_update_date.replace(/-/g, "\/")); 
        if(_d.getTime()-_od.getTime()>_autoupdate_day*24*3600*1000) 
        { 
            var newDoc        = new CLASS_XML(); 
                newDoc.loadRemoteFile(this.updatePath + this.softName + "/" + this.updateFileName);             
            if(newDoc.selectSingleNode("/Config/CurrentVersion")==null) 
            { 
                newDoc.setText("/Config","CurrentVersion", "0.32"); 
                _new_version = "0.32"; 
            } 
            else 
            { 
                _new_version = newDoc.getText("/Config","CurrentVersion", "0.32"); 
            } 
            _new_version = _new_version * 1; 
            //检查是否有新版本 
            if(_new_version>_current_version) 
            { 
                _exist_new_ver = true; 
            } 
            configXML.setText("/Config","UpdateDate",_dd); 
            _save_or_not = true; 
        } 
        if(_save_or_not) 
        { 
            configXML.save(); 
        } 
    } 
    if(_exist_new_ver) 
    { 
        var _window                = this.win; 
        var tempMessageWidth    = 260; 
        var tempMessageHeight    = 120; 
        var tempMessageLeft        = (document.body.clientWidth - tempMessageWidth) /2; 
        var tempMessageTop        = (document.body.clientHeight - tempMessageHeight) /2; 
        var feature = { 
            title:"升级", 
            width:tempMessageWidth, 
            height:tempMessageHeight, 
            left:tempMessageLeft, 
            top:tempMessageTop, 
            borderColor:"#8B89A1", 
            backgroundColor:"#FFFFFF", 
            color:"#000000", 
            titleBackgroundColor:"#8B89A1", 
            titleColor:"#FFFFFF", 
            dragable:true 
        }; 
        var THIS = this; 
        var tempMessageContent    = []; 
        //tempMessageContent[tempMessageContent.length] = "<div style='font-size:12px;padding:5px'>"; 
        tempMessageContent[tempMessageContent.length] = "<table width='100%' height='60' cellPadding='10'><tr><td valign='top'>有新版本,是否更新?<!--insert//--></td></tr></table>"; 
        //tempMessageContent[tempMessageContent.length] = "<br/><br/>"; 
        tempMessageContent[tempMessageContent.length] = "<div align=center><span class='bt'><input type='button' value=' Yes ' class='bt' id='bt_update_yes'></span>  <span class='bt'><input type='button' value=' No ' class='bt' id='bt_update_no'></span></div>"; 
        tempMessageContent[tempMessageContent.length] = "</div>"; 
        _window.open("update_or_not",feature); 
        _window.write("update_or_not",tempMessageContent.join(""),false); 
        THIS.ver = _current_version; 
        _window.items["update_or_not"].all("bt_update_yes").onclick = function() 
                                                                {         
                                                                    THIS.ver = _new_version; 
                                                                    _window.close("update_or_not"); 
                                                                    THIS.update(); 
                                                                } 
        _window.items["update_or_not"].all("bt_update_no").onclick = function() 
                                                                {         
                                                                    _window.close("update_or_not"); 
                                                                } 
        _window.items["update_or_not"].onunload =    function() 
                                                {                                                 
                                                } 
    } 

} 
CLASS_AUTOUPDATE.prototype.update = function() 
{ 
    this.updating    = !this.updating; 
    var t            = new Date(); 
    var THIS        = this; 
    if(this.error == false) 
    { 
    //得到新配置文档 
    var newDoc        = new CLASS_XML(); 
        newDoc.loadRemoteFile(this.updatePath + this.softName + "/" + this.updateFileName); 
        this.error = newDoc.error; 
        if(this.error) 
        { 
            THIS.updating    = false; 
            THIS.updateInfo    = "<table width='100%' height='100' cellPadding='10'><tr><td valign='top'>连接服务器失败<!--insert//--></td></tr></table>"; 
        } 
        else 
        { 
            var updateFileNodes = newDoc.selectNodes("//SystemFile"); 
            var updateInfoNode    = newDoc.selectSingleNode("//UpdateInfo"); 
            var nextVersion        = newDoc.selectSingleNode("//nextversion"); 
            if(updateInfoNode != null) 
            { 
                THIS.updateInfo = updateInfoNode.childNodes[0].text; 
            } 
            if(nextVersion != null) 
            { 
                THIS.nextVersion = nextVersion.childNodes[0].text; 
            } 
            THIS.updateFileList = [];             
            for(var i=0;i<updateFileNodes.length;i++) 
            { 
                var curUpdateFileName        = updateFileNodes[i].getAttribute("name").toLowerCase(); 
                var curUpdateFileVersion    = updateFileNodes[i].getAttribute("version").toLowerCase(); 
                var curUpdateFilePath        = updateFileNodes[i].getAttribute("path").toLowerCase(); 
                if(THIS.systemFiles[curUpdateFileName] == null || THIS.systemFiles[curUpdateFileName] != curUpdateFileVersion) 
                {                                     
                    //本地没有该文件或者版本号不一致 
                    THIS.updateFileList[THIS.updateFileList.length] =  
                    { 
                        name    :curUpdateFileName, 
                        version    :curUpdateFileVersion, 
                        path    :curUpdateFilePath, 
                        type    :"text" 
                    }; 
                } 
            } 
            newDoc.dispose(); 

            if(THIS.updateFileList.length == 0) 
            { 
                THIS.updating    = false; 
                THIS.updateInfo    = "<table width='100%' height='100' cellPadding='10'><tr><td valign='top'>没有需要更新的文件<!--insert//--></td></tr></table>"; 
            } 
            else 
            { 
                var configXML    = new CLASS_XML("xml\\autoupdate.xml"); 
                //添加更新信息 
                if(configXML.error==false&&THIS.updateInfo.length>0) 
                { 
                    var _updateInfo    = configXML.createElement("UpdateInfo"); 
                    var _cdata        = configXML.createCDATASection(THIS.updateInfo); 
                    _updateInfo        .appendChild(_cdata); 
                    configXML.root().appendChild(_updateInfo); 
                    //添加下版本预告 
                    var _nextVersion = configXML.selectSingleNode("//nextversion"); 
                    if( _nextVersion==null) 
                    { 
                        var __next = configXML.createElement("nextversion"); 
                        var __cdata= configXML.createCDATASection(THIS.nextVersion); 
                        __next.appendChild(__cdata); 
                        configXML.root().appendChild(__next); 
                    } 
                    else 
                    { 
                        if(_nextVersion.childNodes.length==0) 
                        { 
                            _nextVersion.appendChild(configXML.createCDATASection("")); 
                        } 
                        _nextVersion.childNodes[0].text = THIS.nextVersion; 
                    } 
                    configXML.setText("/Config","CurrentVersion",THIS.ver); 
                    configXML.save(); 
                } 
                configXML.dispose(); 
                THIS.updateFile(); 
            } 
        }             
    } 
    else 
    { 
        this.updateInfo = "<table width='100%' height='100' cellPadding='10'><tr><td valign='top'>加载配置文件失败!<!--insert//--></td></tr></table>"; 
    } 
    this.updating = false; 
    this.onafterupdate(); 
} 
CLASS_AUTOUPDATE.prototype.updateFile = function(curUpdateId) 
{ 
    var t        = new Date(); 
    var THIS    = this; 
    for(var i= 0;i<this.updateFileList.length;i++) 
    { 
        var curUpdateFile = this.updateFileList[i]; 
        if(curUpdateFile.type == "base64") 
        { 
            var url = this.updatePath  + this.softName + "/base64.aspx?src=" + curUpdateFile.name + "&t=" + t.valueOf(); 
        } 
        else if(curUpdateFile.type == "text") 
        { 
            var url = this.updatePath + this.softName + "/" + curUpdateFile.path + "/" + curUpdateFile.name; 
        } 
        //下载文件 
        var errors     = this.downloadFile(url,curUpdateFile.path,curUpdateFile.name); 
        if(this.error==false) 
        { 
            //记录当前版本信息                     
            var configXML    = new CLASS_XML("xml\\autoupdate.xml"); 
            if(configXML.error==false) 
            { 
                var systemFiles = configXML.selectSingleNode("//SystemFiles"); 
                if(systemFiles    == null) 
                { 
                    systemFiles = configXML.createElement("SystemFiles"); 
                    configXML.selectSingleNode("/Config").appendChild(systemFiles); 
                } 
                var systemFile    = configXML.selectSingleNode("//SystemFiles/SystemFile[@name='" + curUpdateFile.name.toLowerCase() + "']"); 
                if(systemFile    == null) 
                { 
                    systemFile    = configXML.createElement("SystemFile"); 
                    systemFile.setAttribute("name",curUpdateFile.name.toLowerCase()); 
                    systemFile.setAttribute("path",curUpdateFile.path.toLowerCase()); 
                    configXML.selectSingleNode("//SystemFiles").appendChild(systemFile); 
                } 
                systemFile.setAttribute("version",curUpdateFile.version); 
                configXML.save(); 
                configXML.dispose(); 
                this.error         = false; 
                this.updateInfo += errors + "\n"; 
            } 
            else 
            { 
                this.updateInfo += "<table width='100%' height='100' cellPadding='10'><tr><td valign='top'>加载配置文件出错!<!--insert//--></td></tr></table>"; 
            } 
        } 
    } 
} 
CLASS_AUTOUPDATE.prototype.downloadFile = function(url,path,filename) 
{ 
    try 
    { 
        var xmlHTTP    =    new ActiveXObject("Microsoft.XMLHTTP"); 
            xmlHTTP.open("Get",url,false); 
            xmlHTTP.send(); 
        if(xmlHTTP.readyState==4&&xmlHTTP.status==200) 
        { 
            var adodbStream = new ActiveXObject("ADODB" + "." + "Stream"); 
            //判断目录是否存在,不存在则创建 
            this.buildPath(path); 
            var strLocalURL = path.length>0?path + "\\" +filename:filename; 
            //1=adTypeBinary 
            adodbStream.Type= 1;         
            adodbStream.Open(); 
            adodbStream.write(xmlHTTP.responseBody); 
            adodbStream.SaveToFile(strLocalURL,2); 
            adodbStream.Close(); 
            adodbStream        = null; 
            xmlHTTP            = null; 
        } 
        else 
        { 
            this.error        = true; 
            return    filename + "下载失败"; 
        } 
        return ""; 
    } 
    catch(e) 
    { 
        this.error        = true; 
        return    e.description; 
    } 
} 
CLASS_AUTOUPDATE.prototype.refresh = function() 
{ 
    var configXML = new CLASS_XML("xml\\autoupdate.xml"); 
    if(configXML.error==false) 
    { 
        var _softName        = configXML.selectSingleNode ("/Config/SoftName"); 
        var _updatePath        = configXML.selectSingleNode ("/Config/UpdatePath"); 
        var _updateFileName    = configXML.selectSingleNode ("/Config/UpdateFileName"); 
        this.updatePath        = _updatePath     !=null?_updatePath.text    :"http://dooit.3322.org/"; 
        this.softName        = _softName         !=null?_softName.text        :"cc"; 
        this.updateFileName = _updateFileName!=null?_updateFileName.text:"autoupdate.xml"; 
        this.systemFiles = {}; 
        var tempSystemFileNodes = configXML.selectNodes("/Config/SystemFiles/SystemFile"); 
        for(var i=0;i<tempSystemFileNodes.length;i++) 
        { 
            this.systemFiles[tempSystemFileNodes[i].getAttribute("name")] = tempSystemFileNodes[i].getAttribute("version"); 
        } 
    } 
    else 
    { 
        this.error = true; 
    } 
    configXML.dispose();     
} 
CLASS_AUTOUPDATE.prototype.buildPath = function(path) 
{ 
    var _baseUrl    = unescape(document.location.href.substring(document.location.href.lastIndexOf("/")+1,-1)).replace(/^file\:\/\/\//i,"").replace(/\//g,"\\"); 
    var _path        = path.replace(/^\s*|\s*$/g,""); 
    var _fullPath    = ""; 
    //得到全路径 
    if(/^\w\:\\/.test(_path) == false){ 
        _fullPath = _baseUrl + _path; 
    }else{ 
        _fullPath = _path; 
    } 
    var p    = _fullPath.split(/\\|\//g); 
    var fso = new ActiveXObject("Scripting.FileSystemObject"); 
    var t    = ""; 
    for(var i=0;i<p.length;i++){ 
        t += p[i] + "\\"; 
        try 
        { 
            if(!fso.FolderExists(t)) 
            { 
                fso.CreateFolder(t); 
            } 
        } 
        catch(e) 
        { 
            return false; 
        } 
    } 
    return true; 
}
Javascript 相关文章推荐
JS的IE和Firefox兼容性集锦
Dec 11 Javascript
JavaScript判断两种格式的输入日期的正确性的代码
Mar 25 Javascript
利用jQuery实现可输入搜索文字的下拉框
Oct 23 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
Aug 25 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
Aug 11 Javascript
微信小程序之批量上传并压缩图片的实例代码
Jul 05 Javascript
解决vue.js 数据渲染成功仍报错的问题
Aug 25 Javascript
微信小程序 腾讯地图显示偏差问题解决
Jul 27 Javascript
解决vue单页面修改样式无法覆盖问题
Aug 05 Javascript
Vue+ElementUI table实现表格分页
Dec 14 Javascript
Vue 同步异步存值取值实现案例
Aug 05 Javascript
基于vue实现微博三方登录流程解析
Nov 04 Javascript
许愿墙中用到的函数
Oct 07 #Javascript
解放web程序员的输入验证
Oct 06 #Javascript
通过ifame指向的页面高度调整iframe的高度
Oct 05 #Javascript
javascript字典探测用户名工具
Oct 05 #Javascript
TFDN图片播放器 不错自动播放
Oct 03 #Javascript
DOM精简教程
Oct 03 #Javascript
JavaScript去除空格的几种方法
Oct 03 #Javascript
You might like
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
使用ES6语法重构React代码详解
2017/05/09 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
python实现汽车管理系统
2018/11/30 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
python实现字符串完美拆分split()的方法
2019/07/16 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
python中wheel的用法整理
2020/06/15 Python
浅谈amaze-ui中datepicker和datetimepicker注意的几点
2020/08/21 HTML / CSS
高校毕业生登记表自我鉴定
2013/11/03 职场文书
老同学聚会感言
2014/02/23 职场文书
党员干部承诺书范文
2014/03/25 职场文书
代办委托书怎么写
2014/08/01 职场文书
2014年工商所工作总结
2014/12/09 职场文书
2014年终个人总结报告
2015/03/09 职场文书
试用期自我评价范文
2015/03/10 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
小学记事作文之200字
2019/08/06 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js
golang实现浏览器导出excel文件功能
2022/03/25 Golang