首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JQuery document.ready vs Phonegap设备就绪

JQuery document.ready vs Phonegap设备就绪
EN

Stack Overflow用户
提问于 2012-09-25 12:07:07
回答 4查看 61.4K关注 0票数 67

我正在用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?

EN

回答 4

Stack Overflow用户

发布于 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
}
票数 1
EN

Stack Overflow用户

发布于 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();
    });
}
票数 0
EN

Stack Overflow用户

发布于 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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12576062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档