deviceready 事件永远不会在 phonegap 中触发
deviceready event is never fired in phonegap
我有一个 Sencha Touch 应用程序,它应该只在 phonegap deviceready
事件被 phonegap 触发后才开始加载。
微加载程序由
调用
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
事件根本不会触发,至少在前五分钟内,直到我的 phone 的屏幕关闭。
为什么会这样?
您正在将 Ext.blink 定义为一个函数,因此只有 运行 才会添加事件侦听器。您确定它会 运行 在设备实际准备好之前吗?
我不确定,但也许您需要在 运行 时直接设置事件监听器,而不是延迟到函数调用?
问题已解决。
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
期间被内联微加载器替换。因此,link 到 cordova.js
在构建过程中丢失了。正确的代码应该是
<script type="text/javascript" src="cordova.js"></script>
<script id="microloader" type="text/javascript" src=".sencha/app/microloader/development.js"></script>
我有一个 Sencha Touch 应用程序,它应该只在 phonegap deviceready
事件被 phonegap 触发后才开始加载。
微加载程序由
调用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
事件根本不会触发,至少在前五分钟内,直到我的 phone 的屏幕关闭。
为什么会这样?
您正在将 Ext.blink 定义为一个函数,因此只有 运行 才会添加事件侦听器。您确定它会 运行 在设备实际准备好之前吗?
我不确定,但也许您需要在 运行 时直接设置事件监听器,而不是延迟到函数调用?
问题已解决。
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
期间被内联微加载器替换。因此,link 到 cordova.js
在构建过程中丢失了。正确的代码应该是
<script type="text/javascript" src="cordova.js"></script>
<script id="microloader" type="text/javascript" src=".sencha/app/microloader/development.js"></script>