问题:
通过Cordova 加载html 页面,在低版本手机上处理正常,但在高版本手机上出现异常(大概是Android 8.0 以上)
查明的原因大概是:
'deviceready has not fired after 5 seconds.'
也即 html 文件中的 onDeviceReady
方法没有触发
onDeviceReady: function() {}
代码片段如下:
<script type="text/javascript">
/**
* Created by Administrator on 2015/7/29.
*/
"use strict";
var IScroll;
// new FastClick(document.body);
(function($) {
})(Zepto);
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
//----- 划重点 --------> 问题在于 onDeviceReady 没有触发
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
receivedEvent: function(id) {
$("#wrapper .field-group").addClass('hide');
$("#wrapper .divide-con").addClass('hide');
//通过调用navigationHtmlPage对象的recvShareParam方法,传入id,获取当前审批消息的id;
//getParamsCallback是异步成功返回执行方法。
NavigationHtmlPage.recvShareParam(getParamsCallback, function(failed) {}, ['id']);
//获取流程相关的数据
getWorkflowData(function() {
//初始化表单控件
$(".form-con").initForm();
//开启表单动态验证功能
$(".form-con").DynamicvalidateForm();
});
//获取需要默认传入表单的数据
getDataCollector(getDataCollectorCallback);
}
};
/**
* 执行app
*/
app.initialize();
...
</script>
解决方案:
经过调试发现,对问题页面重新加载能正确触发 onDeviceReady()
方法
代码优化如下:
<script type="text/javascript">
/**
* Created by Administrator on 2015/7/29.
*/
"use strict";
var IScroll;
// new FastClick(document.body);
(function($) {
})(Zepto);
var ISReload = false;//重加载标识
var app = {
initialize: function() {
this.bindEvents();
},
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
//延时100毫秒后进行重加载
setTimeout(function() {
if (!ISReload) {
window.location.reload();//重加载
}
},100)
},
onDeviceReady: function() {
ISReload = true;//更新重加载标识
app.receivedEvent('deviceready');
},
receivedEvent: function(id) {
$("#wrapper .field-group").addClass('hide');
$("#wrapper .divide-con").addClass('hide');
//通过调用navigationHtmlPage对象的recvShareParam方法,传入id,获取当前审批消息的id;
//getParamsCallback是异步成功返回执行方法。
NavigationHtmlPage.recvShareParam(getParamsCallback, function(failed) {}, ['id']);
//获取流程相关的数据
getWorkflowData(function() {
//初始化表单控件
$(".form-con").initForm();
//开启表单动态验证功能
$(".form-con").DynamicvalidateForm();
});
//获取需要默认传入表单的数据
getDataCollector(getDataCollectorCallback);
}
};