我在网上看完资料理解的是:
原生的应用,内嵌了HTML的网页,用widget方式,可以实现页面之间的跳转;
只有一个页面用到H5+的应用可以用webview方式;不能打开新页面
如果是纯H5写的app,可以用runtime方式集成;
不知道我理解的对不对,
然后我的情况是:我的安卓应用是纯H5写的,是已经成熟的已经在运营中的应用,是用的Cordova框架,所以打包都是用命令行打包的,我目前增加了一个功能用到了H5+.只在这一个页面中涉及到,其他地方不用,想请问一下我这种情况是应该用webview方式打包还是runtime方式?
还有一个问题是其实我现在三种方式都有尝试,但是5plus一直没有加载成功,有没有方法判断自己在集成的时候哪里出了错误导致集成失败?
我的集成步骤跟着下面的文档走的:
不知道是哪种集成方式的集成方式..http://ask.dcloud.net.cn/article/216
Runtime集成方式:http://www.bcty365.com/content-146-3355-1.html
/只有下面这个页面用到5plus,也就是一进应用的入口/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title>Ionic Seed App</title>
<!-- ionic css -->
<link href="lib/ionic/css/ionic.css" rel="stylesheet">
<!-- your app's css -->
<link href="css/clj_common.css" rel="stylesheet">
<link href="css/clj_all.css" rel="stylesheet">
<!-- ionic/angularjs scripts -->
<script src="lib/ionic/js/ionic.bundle.js"></script>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
<!-- your app's script -->
<script src="js/app.js"></script>
<script src="js/services.js"></script>
<script src="js/controllers.js"></script>
<script src="js/md5js.js"></script>
<script src="js/jquery_1.9.1.js"></script>
<script src="js/ng-cordova.js"></script>
<!--<script src="js/mui.min.js"></script>-->
<script src="js/h.min.js"></script>
<script src="html5plus://ready"></script>
<script type="text/javascript" charset="utf-8">
// 这里可以调用5+ API了,为了更好的兼容性,应该使用以下代码进行判断
window.onerror = function (message, url, line, column, error) {
alert('log---onerror::::'+message+' '+url+' '+line+' '+column+' '+error);
}
// alert('eee');
// alert(window.plus);
if(undefined !=window.plus){
// 在这里调用5+ API
alert('hello');
}else{// 兼容老版本的plusready事件
alert('else');
document.addEventListener('plusready',function () {
// 在这里调用5+ API
alert('hi');
},false);
}
</script>
</head>
<body ng-app="Doctor" animation="slide-left-right-ios7">
<ion-nav-view></ion-nav-view>
</body>
<script>
var version='1.1.4';
//检查自动更新
function svn(old_version) {
alert("svn");
var xhr_svn = new plus.net.XMLHttpRequest();
alert('lilili');
xhr_svn.onreadystatechange = function() {
alert(xhr_svn.readyState);
if (xhr_svn.readyState == 4) {
alert(xhr_svn.status);
if (xhr_svn.status == 200) {
var res = JSON.parse(xhr_svn.responseText);
alert("res:"+res);
alert("res的类型:"+ typeof res);
alert("res.update:"+res.update);
if (res.update == "yes") {
alert("服务器的版本:"+res.version);
alert("本机的版本:"+old_version);
var new_version=res.version.replace(/\./g,'');
old_version=old_version.replace(/\./g,'');
if (parseInt(new_version) > parseInt(old_version) ) {
var upr;
plus.nativeUI.confirm( "有新版本发布了,是否现在更新?", function(e){
upr=(e.index==0)?"Y":"N";
// console.log(upr);
if(upr=="Y"){
var wt = plus.nativeUI.showWaiting('下载更新中,请勿关闭');
var url = res.url; // 下载文件地址
var dtask = plus.downloader.createDownload(url, {}, function(d, status) {
console.log(JSON.stringify(d));
if (status == 200) { // 下载成功
var path = d.filename;
console.log(d.filename);
plus.runtime.install(path);
} else { //下载失败
alert("下载失败: " + status);
}
});
dtask.start();
}else{
}
}, "近视大管家-医生版", ["确认","取消"] );
} else {
console.log('已经是最新的版本了');
}
}
} else {
plus.nativeUI.toast( "网络连接错误!");
}
}
}
// xhr_svn.open("GET","http://121.40.144.109:19090/myopic-dev/resources/update_ShortSightednessDoctor.json");//这里的地址是上面json文件的地址
xhr_svn.open("GET","http://www.inwoold.com/myopic-dev/resources/update_ShortSightednessDoctor.json");//这里的地址是上面json文件的地址
xhr_svn.send();
};
// if(window.plus != undefined){
// // 在这里调用5+ API
// alert('hello');
// svn(version); //更新版本同时要更新svn中参数
// }else{// 兼容老版本的plusready事件
// alert('else');
// document.addEventListener('plusready',function () {
// // 在这里调用5+ API
// alert('hi');
// svn(version); //更新版本同时要更新svn中参数
// },false);
// }
</script>
</html>
2 个回复
DCloud_App_Array
如果没有使用到多Webview窗口管理api(plus.webview.*),建议使用Webview模式。
Widget模式跟适用于开发了多个5+应用,点击一个按钮进入一个独立的5+应用。
runtime模式其实就是离线打包(单个5+应用生成apk)
l***@live.com
runtime集成后是不是 plus.webview 的API都用不了了?我最近做了一个项目,需要用第三方SDK写java插件。我用runtime集成(按照runtime集成的教程弄的),发现HBuilder里写的plus.webview.open()之类的方法都用不了了。mui.openWindow倒是可以打开页面,但extra传的值,在新页面里也没法获取了。
官方有提到webview集成是没法用plus.webview的API的,widget集成(就是webapp集成)没有这个限制。那么runtime集成呢? plus.webview 的API也都用不了吗?