我在Android中使用PhoneGap + jQuery Mobile,我对Phonegap的“onBodyLoad()/ onDeviceReady()”函数和Jquery的“$(document).ready()”感到困惑。
在PhoneGap文档中:
PhoneGap包含两个代码库: 原生和JavaScript。虽然 本机代码正在加载,一个自定义 显示加载图像。然而, JavaScript只在DOM加载一次 负载。这意味着您的Web应用程序 可能,可能会拨打PhoneGap 之前的JavaScript函数 加载。
PhoneGap deviceready事件触发 一旦PhoneGap完全加载。后 设备已经解雇,你可以放心 调用PhoneGap函数。
通常,您需要附加一个 事件监听器 document.addEventListener一次 HTML文档的DOM已加载。
在jQuery doc中:
虽然JavaScript提供了负载 用于在页面执行代码的事件 渲染,此事件没有得到 触发,直到所有资产如 图像已被完全接收。 在大多数情况下,可以运行脚本 一旦DOM层次结构出现了 完全构造。处理程序通过 到.ready()保证是 在DOM准备好之后执行,所以 这通常是最好的地方 附加所有其他事件处理程序和 运行其他jQuery代码。使用时 依赖于CSS值的脚本 风格属性,这很重要 引用外部样式表或 之前嵌入样式元素 引用脚本。
在代码依赖于加载的情况下 资产(例如,如果维度 图像是必需的),代码 应该放在一个处理程序中 改为加载事件。
我的实验表明,ready()总是早于onDeviceReady(),如何解释这个?我应该如何使用它们?我应该在onDeviceReady()中放入ready()以使每个调用都安全吗?
提前谢谢。
此致 克里斯
答案 0 :(得分:31)
$(document).ready
将始终首先触发,因为它在所有DOM元素都已加载时被触发。此时可能尚未加载图像,javascript函数,css等。
所以PhoneGap让你将onload
方法放在正文的onLoad
方法上,以便在DOM的特定部分准备就绪时触发它。准备好DOM之后,您将创建一个事件侦听器,以确保phonegap.js 本身已准备好(例如,不仅仅是应用程序UI)。只有加载了phonegap.js后才能使用它提供的功能。
所以是的,$(document).ready
将首先触发,但这并不意味着您可以使用phonegap.js('api'调用)。您不能将$(document).ready
置于另一个函数内(据我所知),因为它是由正在加载的DOM触发的。您可以(但不应该)从onDeviceReady
调用$(document).ready
函数。这样做的问题是,如果设备实际上没有准备就绪,则不会进行api调用。
所以我会继续使用他们设置的body onLoad / onDeviceReady链。如果需要更多详细说明,请告诉我。