Sha*_*awn 9 javascript events ready cordova
在cordova提供的示例app中cordova create ...
,以下代码监听deviceready
事件:
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
Run Code Online (Sandbox Code Playgroud)
这很好,但是在我有时间听之前事件被解雇会发生什么?例如,使用以下内容替换示例应用程序(上面)中的代码:
bindEvents: function() {
setTimeout(function () {
document.addEventListener('deviceready', this.onDeviceReady, false);
}, 2000)
},
Run Code Online (Sandbox Code Playgroud)
在此示例中,永远不会调用this.onDeviceReady.是否有更好,更可靠的方法来检查cordova是否准备好了?像这样的东西:
bindEvents: function() {
setTimeout(function () {
if (window.cordovaIsReady) {
this.onDeviceReady()
} else {
document.addEventListener('deviceready', this.onDeviceReady, false);
}
}, 2000)
},
Run Code Online (Sandbox Code Playgroud)
fra*_*ank 21
根据cordova文档
deviceready事件的行为与其他事件略有不同.在deviceready事件触发后注册的任何事件处理程序都会立即调用其回调函数.
正如您可以看到在设备已经触发后是否附加了任何事件处理程序,它将立即被调用.
在setTimeout函数中,这不再指向目标对象,上下文不同.因此永远不会调用您的处理程序.
你可以通过将它放在你的<head>
标签中来尝试下面的代码,我在那里使用全局函数/变量(为了简单起见,避免出现这种情况).这应该会显示警报.
<script>
function onDeviceReady () {
alert("Calling onDeviceReady()");
}
setTimeout(function () {
document.addEventListener('deviceready', onDeviceReady, false);
}, 9000);
</script>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16826 次 |
最近记录: |