deviceready事件从未在phonegap中激发



我有一个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事件根本不会触发,至少在我手机屏幕关闭前的前五分钟内是这样

为什么会这样?

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

我不确定,但也许您需要在运行时直接设置eventlistener,而不是推迟到函数调用?

问题已解决。

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

长版本:

很抱歉,在我发布的代码中找不到这个问题,尽管我认为我已经涵盖了所有的基础。在拼命寻找解决方案的过程中,我偶然发现http://danmarner.com/2013/05/28/Sencha-Touch-2-and-PhoneGap-integration.html.并且发现必须手动添加CCD_ 5。虽然我很确定会是这样,但我检查了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>

所以,根本原因是:一个简单的复制&粘贴错误。在sencha app build期间,使用id="microloader"的第一个脚本调用被内联微加载器取代。因此,到cordova.js的链路在构建期间丢失。正确的代码应该是

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

最新更新