Android Cordova 加载html 报错:deviceready has not fired after 5 seconds.

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haha_zhan/article/details/82420163

问题:
通过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);

    }

};

猜你喜欢

转载自blog.csdn.net/haha_zhan/article/details/82420163