代码参考App资源在线升级
在原自动在线升级的基础上新增了手动在线更新
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>hello world</title>
<script src="js/update3.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
function plusReady() {
// Android处理返回键
plus.key.addEventListener('backbutton', function() {
if (confirm('确认退出?')) {
plus.runtime.quit();
}
}, false);
//自动在线更新
//mui.checkUpdate();
mui.checkUpdate(function(key) {
if (key)
console.log("有新版本更新");
else console.log("无新版本可更新")
});
}
if (window.plus) {
plusReady();
} else {
document.addEventListener('plusready', plusReady, false);
}
function checkUpdate() {
mui.downWgt(true);
}
</script>
</head>
<body>
Hello HBuilder for test update.
<br/>
<br/> version 1.0
<br/>
<br/>
<br/>
<button onclick="checkUpdate()">Check Update</button>
</body>
</html>
(function($) {
var wgtVer = null;
// 检测更新,返回最新版本号
//正式上线时请更改当前版本
var checkUrl = "http://demo.dcloud.net.cn/test/update/check.php";
// 下载wgt文件
var wgtUrl = "http://demo.dcloud.net.cn/test/update/H5EF3C469.wgt";
function checkUpdate(callback) {
// 获取本地应用资源版本号
plus.runtime.getProperty(plus.runtime.appid, function(inf) {
wgtVer = inf.version;
console.log("当前应用版本:" + wgtVer);
});
// plus.nativeUI.showWaiting("检测更新...");
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
switch (xhr.readyState) {
case 4:
// plus.nativeUI.closeWaiting();
if (xhr.status == 200) {
console.log("检测更新成功:" + xhr.responseText);
var newVer = xhr.responseText;
if (compareVersion(wgtVer, newVer)) {
if (!callback)
downWgt(false); // 下载升级包
else callback(true);
} else {
// plus.nativeUI.alert("无新版本可更新!");
if (callback) callback(false);
}
} else {
console.log("检测更新失败!");
// plus.nativeUI.alert("检测更新失败!");
}
break;
default:
break;
}
}
xhr.open('GET', checkUrl);
xhr.send();
}
function downWgt(key) {
var w;
if (key) {
w = plus.nativeUI.showWaiting(" 开始下载... ");
}
var options = {
filename: "_doc/update/"
};
var dtask = plus.downloader.createDownload(wgtUrl, options, function(d, status) {
if (status == 200) {
console.log("下载wgt成功:" + d.filename);
setTimeout(installWgt(d.filename, key), 2000); // 安装wgt包
} else {
console.log("下载wgt失败!");
if (key) {
plus.nativeUI.alert("下载更新资源失败!");
}
}
});
if (key) {
dtask.addEventListener("statechanged", function(task, status) {
switch (task.state) {
case 1: // 开始
w.setTitle(" 开始下载... ");
break;
case 2: // 已连接到服务器
w.setTitle(" 开始下载... ");
break;
case 3:
var a = task.downloadedSize / task.totalSize * 100;
console.log(a)
w.setTitle(" 已下载" + parseInt(a) + "% ");
break;
case 4: // 下载完成
w.close();
break;
}
});
}
dtask.start();
}
// 更新应用资源
function installWgt(path, key) {
if (key) {
plus.nativeUI.showWaiting("在线升级,安装资源文件...");
}
plus.runtime.install(path, {}, function() {
if (key) {
plus.nativeUI.closeWaiting();
//自动在线升级不重启
plus.nativeUI.alert("应用资源更新完成!", function() {
plus.runtime.restart();
});
}
console.log("安装wgt文件成功!");
}, function(e) {
console.log("安装wgt文件失败[" + e.code + "]:" + e.message);
if (key) {
plus.nativeUI.closeWaiting();
plus.nativeUI.alert("在线升级,安装资源文件失败");
}
});
}
/**
* 比较版本大小,如果新版本nv大于旧版本ov则返回true,否则返回false
* @param {String} ov
* @param {String} nv
* @return {Boolean}
*/
function compareVersion(ov, nv) {
if (!ov || !nv || ov == "" || nv == "") {
return false;
}
var b = false,
ova = ov.split(".", 4),
nva = nv.split(".", 4);
for (var i = 0; i < ova.length && i < nva.length; i++) {
var so = ova[i],
no = parseInt(so),
sn = nva[i],
nn = parseInt(sn);
if (nn > no || sn.length > so.length) {
return true;
} else if (nn < no) {
return false;
}
}
if (nva.length > ova.length && 0 == nv.indexOf(ov)) {
return true;
}
}
$.checkUpdate = checkUpdate;
$.downWgt = downWgt;
return $;
}(mui={}));
小云菜 (作者)
是第二个页面
checkurl默认返回的是最新版本号,语言无关
关于更新 可以在首页默认自动更新,也可以在设置页面检查更新,手动选择是否要更新
建议使用andorid4.4以上测试,chrome 能调试。帮助链接在这http://ask.dcloud.net.cn/docs#http://ask.dcloud.net.cn/article/69
2015-05-25 09:25