热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

自动更新作用_javascript技巧

自动更新作用
代码如下:


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] = "

";
tempMessageContent[tempMessageContent.length] = this.updateInfo;
//tempMessageContent[tempMessageContent.length] = "

";
tempMessageContent[tempMessageContent.length] = "

";
tempMessageContent[tempMessageContent.length] = "

";

_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] = "

";
tempMessageContent[tempMessageContent.length] = "

有新版本,是否更新?
";
//tempMessageContent[tempMessageContent.length] = "

";
tempMessageContent[tempMessageContent.length] = "

";
tempMessageContent[tempMessageContent.length] = "

";

_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 = "
连接服务器失败
";
}
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 {
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 = "
没有需要更新的文件
";
}
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 = "
加载配置文件失败!
";
}
this.updating = false;
this.onafterupdate();

}

CLASS_AUTOUPDATE.prototype.updateFile = function(curUpdateId)
{

var t = new Date();
var THIS = this;

for(var i= 0;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 += "
加载配置文件出错!
";
}
}
}

}

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 {
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 t += p[i] + "\\";

try
{
if(!fso.FolderExists(t))
{
fso.CreateFolder(t);
}
}
catch(e)
{
return false;
}
}

return true;
}
推荐阅读
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 解决MongoDB Compass远程连接问题
    本文记录了在使用阿里云服务器部署MongoDB后,通过MongoDB Compass进行远程连接时遇到的问题及解决方案。详细介绍了从防火墙配置到安全组设置的各个步骤,帮助读者顺利解决问题。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文详细介绍了 MySQL 的查询处理流程,包括从客户端连接到服务器、查询缓存检查、语句解析、查询优化及执行等步骤。同时,深入探讨了 MySQL 中的乐观锁机制及其在并发控制中的应用。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
author-avatar
时尚淘宝交__流站
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有