当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 自动更新作用

Javascript
用Javascript实现锚点(Anchor)间平滑跳转
实现png图片和png背景透明(支持多浏览器)的方法
一个用javascript写的select支持上下键、首字母筛选以及回车取值的功能
用DIV完美模拟createPopup 弹出窗口(修正版),支持Firefox,ie,chrome
JavaScript 中级笔记 第一章
IE与Firefox在JavaScript上的7个不同写法小结
MooTools 1.2介绍
Mootools 1.2教程(2) DOM选择器
Mootools 1.2教程(3) 数组使用简介
在IE下获取object(ActiveX)的Param的代码
ExtJS 配置和表格控件使用
javascript 缓冲效果实现代码 推荐
html数组字符串拼接的最快方法
JavaScript 浮动定位提示效果实现代码
类似CSDN图片切换效果脚本
javascript 面向对象编程 function也是类
javascript 面向对象编程 聊聊对象的事
javascript 面向对象编程 function是方法(函数)
[原创]基于innerHTML中的script广告实现代码[广告全部放在一个js里面]
jQuery slider Content(左右控制移动)

Javascript 中的 自动更新作用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 156 ::
收藏到网摘: n/a

复制代码 代码如下:

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;
}