[英]How can I check if cordova is ready if the deviceready event has already fired?
在示例应用程序中,cordova通过cordova create ...
,以下代码监听deviceready
事件:
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
这很好,但是在我有时间听之前事件被解雇会发生什么? 例如,使用以下内容替换示例应用程序(上面)中的代码:
bindEvents: function() {
setTimeout(function () {
document.addEventListener('deviceready', this.onDeviceReady, false);
}, 2000)
},
在此示例中,永远不会调用this.onDeviceReady。 是否有更好,更可靠的方法来检查cordova是否准备好了? 像这样的东西:
bindEvents: function() {
setTimeout(function () {
if (window.cordovaIsReady) {
this.onDeviceReady()
} else {
document.addEventListener('deviceready', this.onDeviceReady, false);
}
}, 2000)
},
根据cordova文档
deviceready事件的行为与其他事件略有不同。 在deviceready事件触发后注册的任何事件处理程序都会立即调用其回调函数。
正如您可以看到在设备已经触发后是否附加了任何事件处理程序,它将立即被调用。
在setTimeout函数中, 这不再指向目标对象,上下文不同。 因此永远不会调用您的处理程序。
您可以通过将以下代码放在<head>
标记中来尝试以下代码,其中我使用全局函数/变量(为了简单起见,避免出现此上下文问题)。 这应该会显示警报。
<script>
function onDeviceReady () {
alert("Calling onDeviceReady()");
}
setTimeout(function () {
document.addEventListener('deviceready', onDeviceReady, false);
}, 9000);
</script>
frank
回答确实有效。 但处理这个的正确方法不是通过添加超时。
将在加载DOM时创建deviceready
事件处理程序。 因此,要使用该事件,我们应该等待直到DOMContentLoaded
。 之后我们可以将侦听器添加到deviceready
事件中
document.addEventListener("DOMContentLoaded", function() {
//alert("Calling DOMContentLoaded");
document.addEventListener('deviceready', function(){
//alert("Calling onDeviceReady()");
callFirebase();
}, false);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.