Phonegap 3应用程序不会进入deviceready()

时间:2013-12-23 02:50:59

标签: android eclipse cordova

我最近设法将我的Phonegap版本从2.9升级到3.3并且刚刚设法升级我的项目以便在3.3中工作

我现在收到一个错误,我的应用程序将不会进入deviceready()状态。在更改为+3.0之前,我的应用程序输入deviceready()就好......我已经运行了CLI'build'和'update'命令将我的项目修改为+3.0规范并自行调整了一些事情,所以确定错误关于插件将被解决。

我还应该提一下,我最近才添加了这部分,它似乎解决了一个NPObject错误(在phonegap生成的helloworld应用程序中看到它,我想应该添加它):

<script src="js/index.js">app.initialize()</script>

以下是应该调用deviceready的相关html代码块:

在index.html中:

<script src="js/jquery.js"></script>
<script src="js/jquery.mobile-1.2.0.js"></script>
<script src="cordova/lib/cordova.js"></script>
<script src="js/index.js">app.initialize()</script>
<script src="js/mustache.js"></script>
<script>
.
.
.
    function init() {
        document.addEventListener("deviceready", onDeviceReady, false);
    }

    function onDeviceReady() {
        //db = window.openDatabase("Notes","1.0","Saved Notes", 200000);
        //db.transaction(getDBNotes, onDBError, onDBSuccess);
        console.log("WITHIN onDeviceReady()");
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFSSuccess, onFSError);
    }

这是我的index.js文件,以防这一点很重要:

            var app = {
        // Application Constructor
        initialize: function() {
            this.bindEvents();
        },
        // Bind Event Listeners
        //
        // Bind any events that are required on startup. Common events are:
        // 'load', 'deviceready', 'offline', and 'online'.
        bindEvents: function() {
            document.addEventListener('deviceready', this.onDeviceReady, false);
        },
        // deviceready Event Handler
        //
        // The scope of 'this' is the event. In order to call the 'receivedEvent'
        // function, we must explicity call 'app.receivedEvent(...);'
        onDeviceReady: function() {
            app.receivedEvent('deviceready');
            console.log("within index.js- app.onDeviceReady()");
        },
        // Update DOM on a Received Event
        receivedEvent: function(id) {
            var parentElement = document.getElementById(id);
            var listeningElement = parentElement.querySelector('.listening');
            var receivedElement = parentElement.querySelector('.received');

            listeningElement.setAttribute('style', 'display:none;');
            receivedElement.setAttribute('style', 'display:block;');

            console.log('Received Event: ' + id);
        }
    };

当我在我的设备上的eclipse中运行我的应用程序时,我收到此错误:

"deviceready has not fired after 5 second.", source: file://android_asset/www/cordova.lib/cordova.js

我一直绞尽脑汁想要让这个项目正常运行,所以我可以继续开发,但我似乎无法解决这个问题。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我在Eclipse的日志中一直看到这个问题。

  

&#34; E / Web控制台(7662):未捕获的模块   org.apache.cordova.plugin.canvas.canvas已定义:79&#34;

想通了如果我从&#34; platforms / android / .staging / www / cordova_plugins.js&#34;中删除了它,它似乎解决了我的问题,因为它将自己扔出Cordova.js,因为这是一个例外。

 03-12 17:21:10.411: E/Web Console(7662): Uncaught module
 org.apache.cordova.plugin.canvas.canvas already defined:79

答案 1 :(得分:0)

我认为将以下内容添加到config.xml将起作用。出于与我在answer

中概述的相同的原因
<gap:plugin name="org.apache.cordova.device" />

答案 2 :(得分:0)

Cordova 3更改了cordova / phonegap脚本的引用方式,请尝试更改此内容:

<script src="cordova/lib/cordova.js"></script>

到此:

<script src="cordova.js"></script>