在phonegap中,我需要在deviceready事件函数中使用$(document).ready(...)吗?我可以确定在调用deviceready事件时是否加载了文档吗?
示例:
document.addEventListener('deviceready',
function() {
$(document).ready(function() { // is this too much?
initCampusWeb();
});
}, false);
答案 0 :(得分:4)
这种方式的工作原理是jQuery(document).ready()
首先触发,然后deviceready
触发。
我通常会像这样设置我的代码:
jQuery(document).ready(function () {
// do document ready stuff
}).on('deviceready', function () {
// do deviceready stuff, put all calls to plugins in here
});
所以关于initCampusWeb
去哪里的问题取决于你在该函数中做了什么。如果它使用插件,请将其放在deviceready
处理程序中。
答案 1 :(得分:2)
我不确定在文档准备好之后deviceready总是会触发,所以我采取了以下异步方法,如下所示:
bindEvents: function () {
var me = this;
document.addEventListener('deviceready', function () {
me.onDeviceReady();
}, false);
$(document).ready(function () {
me.onDocumentReady();
});
},
documentReady: false,
onDocumentReady: function () {
this.documentReady = true;
this.checkReady();
},
deviceReady: false,
onDeviceReady: function () {
this.deviceReady = true;
this.checkReady();
},
checkReady: function (id) {
if (this.documentReady && this.deviceReady) this.load();
},
load: function () {
// do stuff
}
这样,您不会冒险在事件发生后附加处理程序。可能有点矫枉过正,但是给了我完全的信心和异步可扩展性(如果我想让load()等待另一个事件完成)。
答案 2 :(得分:1)
根据cordova文件:
Cordova由两个代码库组成:native和JavaScript。虽然 本机代码加载,显示自定义加载图像。的然而, 只有在DOM加载后才会加载JavaScript。这意味着Web应用可能会加载 可能在之前调用Cordova JavaScript函数 相应的本机代码可用。
Cordova完全加载后,deviceready事件将触发。一旦 事件触发,您可以安全地调用Cordova API。应用程序 通常使用document.addEventListener附加一个事件侦听器 已经加载了HTML文档的DOM。
deviceready事件的行为与其他事件略有不同。任何 在deviceready事件触发后注册的事件处理程序 立即调用回调函数。
$(document).on("ready")
只有在页面文档对象模型(DOM)准备好执行JavaScript代码后才会运行。
您只能使用document.addEventListener('deviceready')
作为该prupouse
答案 3 :(得分:1)
这是正确的方法:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
// Your code here
}