Phonegap的deviceready与document ready的区别

10
我在使用phonegap的设备就绪事件时遇到了问题。我正在iOS 6.0下测试。
当设备准备就绪时,DOM尚未准备好。如果我在deviceready事件监听器中绑定事件到某些DOM元素上,我将不会收到任何通知,因为这些元素在此早期时间不存在。
因此,等待DOM和phonegap都完成加载的最佳实践是什么?

你是这样做的吗: `document.addEventListener("deviceready", onDeviceReady, false);function onDeviceReady() { // 现在可以安全地使用 PhoneGap API }` 在此脚本之前,您提到了 'phonegap....js'。 - davehale23
1
deviceready事件只在DOMContentLoaded事件触发后以及来自本地代码的消息已经传递给JavaScript之后才会被触发。 - davejohnson
我在这里找到了完美的答案:https://dev59.com/UGcs5IYBdhLWcg3wym_D#14109006 - Nishanth
3个回答

3
如果您正在使用jQuery,请尝试以下操作:
$(document).ready(function(){

    document.addEventListener("deviceready",onDeviceReady,false);       
});

function onDeviceReady(){
    //write your function body here

}

如果您只使用JavaScript,请尝试以下方法

if(document.readyState === "complete") {
  document.addEventListener("deviceready",onDeviceReady,false); 
}

function onDeviceReady(){
        //write your function body here

    }

1
尝试像这样做:
function onLoad(){
  document.addEventListener("deviceready", onDeviceReady, false);
}

function onDeviceReady(){
  // Now safe to use the PhoneGap API
}

然后:

<body onload="onLoad()">

这将确保在调用deviceready之前DOM已经准备就绪


0

我使用PhoneGap应用程序时最好的体验是使用FastClick库并像这样初始化您的应用程序:

<script type="text/javascript" src="vendor/fastclick/lib/fastclick.js"></script>

<script type="text/javascript">
    window.addEventListener('load', function() {
        FastClick.attach(document.getElementById('container'));

        document.addEventListener('deviceready', function () {
            // Initialize your app here
        });
    });
</script>

您还可以查看答案以获取有关文档加载事件的更多详细信息。

在移动浏览器上消除物理点击和点击事件触发之间的300毫秒延迟,必须使用FastClick。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接