我有一个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
事件根本不会发生,至少在前五分钟内,直到我的手机屏幕关闭。
为什么会这样?
答案 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>