我正在用jquery制作一个phonegap应用程序。我不知道是否应该将整个代码包装在JQuery的$(document).ready()
中,如下所示
$(document).ready(function(){
//mycode
});
或者在phonegap的deviceready事件中,比如
document.addEventListener("deviceready", function(){
//mycode
});
我目前正在使用document.ready
,但我认为如果我尝试访问document.ready
中的一些Phonegap API方法,我可能会遇到问题。
哪个事件最适合包装我的代码,document.ready还是deviceready?
发布于 2017-02-07 17:58:06
它们是不一样的。
jQuery.ready()正在使用:
document.addEventListener("DOMContentLoaded", yourCallbackFunction, false);
来源:https://code.jquery.com/jquery-3.1.1.js
Cordova/PhoneGap指导您使用:
document.addEventListener("deviceready", yourCallbackFunction, false);
来源:https://cordova.apache.org/docs/en/latest/cordova/events/events.html
我的建议是,将Cordova/PhoneGap插件的所有初始化代码放在deviceready
事件发生时触发的回调函数中。示例:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
// Now safe to use device APIs
}
发布于 2016-02-09 18:54:01
@Kinjal的回答真的帮助我走上了正轨,但我不得不在时间上与很多问题作斗争。
我使用Cordova设备就绪事件来读取我的应用程序的数据文件,一些驱动界面构建的JSON包,默认情况下加载到www文件夹中,但最终可能会从服务器下载,以升级应用程序数据库。
我发现了很多问题,因为在路由开始之前,应用程序数据结构没有足够的时间进行初始化。
我最终得到了这个解决方案:首先初始化jQuery,在jQuery初始化结束时调用Cordova的事件处理程序,在Cordova初始化中的最后一个处理结束时调用应用程序启动例程。
所有这一切噩梦的开始,是因为我需要一种方法来读取Hogan.js的模板文件,而不能使用文件协议和简单的XHR来读取它们。
如下所示:
$(document).ready(function () {
...
// are we running in native app or in a browser?
window.isphone = false;
if (document.URL.indexOf('http://') === -1 && document.URL.indexOf('https://') === -1) {
window.isphone = true;
}
if (window.isphone) {
document.addEventListener('deviceready', onDeviceReady, false);
} else {
onDeviceReady();
}
});
function onDeviceReady() {
function readFromFile(fileName, cb) {
// see (https://www.neontribe.co.uk/cordova-file-plugin-examples/)
}
...
readFromFile(cordova.file.applicationDirectory + 'www/views/tappa.html', function (data) {
app.views.lastview = data;
app.start();
});
}
发布于 2016-09-05 22:29:13
我使用的是PhoneGap Build cli-6.2.0,当我测试您建议的过程时,它不会在函数onDeviceReady()
中做任何事情。
对于旧版本的PGB,它可以工作!
$(document).ready(function() {
window.isphone = false;
if (document.URL.indexOf("http://") === -1 && document.URL.indexOf("https://") === -1) { window.isphone = true }
if (window.isphone) { document.addEventListener("deviceready", this.onDeviceReady, false); } else { onDeviceReady(); }
});
function onDeviceReady() {
alert( window.isphone );
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
https://stackoverflow.com/questions/12576062
复制相似问题