deviceready事件永远不会在phonegap中触发

时间:2015-03-23 17:00:55

标签: javascript android cordova javascript-events

我有一个Sencha Touch应用程序,只有在phonegap触发phonegap deviceready事件后才能开始加载。

调用微装载器
Ext.blink({
    id:"8b19cfab-9dd1-44d0-892e-28f50a42aecd",
    js:[
        {path:"app.js",update:"full",version:"0.3.5"}
    ],
    css:[
        {path:"resources/css/app.css",update:"full",theme:"Default"},
        {path:"resources/css/sch.css",update:"full"}
    ]
});

在此电话会议之前,我添加了以下内容:

if(document.URL.indexOf('file://')==0) {
    var oldBlink = Ext.blink;
    Ext.blink = function(options) {
        window.alert('Adding deviceready event listener.');
        document.addEventListener("deviceready", function() {
            window.alert('Deviceready event listener was fired.');
            oldBlink(options);
        }, false);
    }
}

现在,两个window.alert调用同时添加,仅用于调试目的。只有第一个发射。因此,没有缓存问题或任何事情,我只需要假设deviceready事件根本不会发生,至少在前五分钟内,直到我的手机屏幕关闭。

为什么会这样?

2 个答案:

答案 0 :(得分:0)

您将Ext.blink定义为函数,因此在运行之前不会添加eventlistener。你确定它会在设备准备就绪之前运行吗?

我不确定,但是你可能需要在运行时直接设置eventlistener,而不是延迟到函数调用?

答案 1 :(得分:0)

问题解决了。

tl; dr:cordova.js AKA phonegap.js未添加到项目中。

长版:

对不起,我发布的代码中找不到该问题,尽管我认为我已覆盖了所有基础。为了解决方案而努力,我偶然发现了http://danmarner.com/2013/05/28/Sencha-Touch-2-and-PhoneGap-integration.html。并发现必须手动添加cordova.js。虽然很确定会是这样,但我检查了这是否是APK的情况。它不是。尽管如此,它还是在预构建index.html中:

<script id="microloader" type="text/javascript" src="cordova.js"></script>
<script id="microloader" type="text/javascript" src=".sencha/app/microloader/development.js"></script>

因此,根本原因是:一个简单的复制和粘贴错误。 id="microloader"期间,内联微型加载器会替换sencha app build的第一个脚本调用。因此,在构建期间,cordova.js的链接将丢失。正确的代码将是

<script type="text/javascript" src="cordova.js"></script>
<script id="microloader" type="text/javascript" src=".sencha/app/microloader/development.js"></script>