Phonegap“onBodyLoad()/ onDeviceReady()”函数与Jquery“$(document).ready()”之间的关系

时间:2011-02-18 01:15:00

标签: jquery android mobile cordova

我在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()以使每个调用都安全吗?

提前谢谢。

此致 克里斯

1 个答案:

答案 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链。如果需要更多详细说明,请告诉我。