Javascript deviceReady不在PhoneGap应用程序中工作,如何?

Javascript deviceReady不在PhoneGap应用程序中工作,如何?,javascript,jquery,android,cordova,Javascript,Jquery,Android,Cordova,我有一个简单的PhoneGap应用程序作为fallows: <!DOCTYPE HTML> <html> <head> <title>PhoneGap powered App</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesh

我有一个简单的PhoneGap应用程序作为fallows:

<!DOCTYPE HTML>
<html>
    <head>
        <title>PhoneGap powered App</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="css/jquery.mobile-1.0.min.css" />
        <script type="text/javascript" charset="utf-8" src="phonegap-1.3.0.js"></script>
        <script src="js/jquery-1.7.1.min.js"></script>
        <script src="js/jquery.mobile-1.0.min.js"></script>


    <script type="text/javascript" charset="utf-8">

        document.addEventListener("deviceready", onDeviceReady, true); 
        function onDeviceReady() {
            alert ('123');
        }
    </script>

    </head>
    <body onload="onDeviceReady()">
        <div data-role="page">

            <div data-role="header">
                <h1>title</h1>
            </div><!-- /header -->

            <div data-role="content">   
                <h2>Begin by inserting your credentials.</h2>
                ...
            </div><!-- /content -->

        </div><!-- /page -->

        <script type="text/javascript" charset="utf-8">
            $(document).ready(function () {

            });
        </script>
    </body>
</html>

PhoneGap应用程序
文件。添加的监听器(“deviceready”,onDeviceReady,true);
函数ondevicerady(){
警报(“123”);
}
标题
首先插入您的凭据。
...
$(文档).ready(函数(){
});
这里发生的是警报
alert('123')永远不会被解雇。但是如果我去掉其他JavaScript代码,只留下警报,它就会被触发

另外,如果我使用
$(document).ready(函数(){alert('123');}
我会得到警报

这里发生了什么,为什么
devicerady
没有被解雇

有什么想法吗?

这样试试:

 document.addEventListener("deviceready", function(){
      alert("123");
 },true);

@GPRathour提供的功能之所以有效,是因为
document.addEventListener()
正在侦听
deviceready
,如果为true,则运行您的警报功能。我没有按照您的方式使用它,原因有二:

1) 当DOM加载并转到您的body标记时,它正在调用OnDeviceReady(),而侦听器从未收到该调用,因此phonegap不知道它已准备好运行

2) 您必须从函数中调用侦听器并使用“false”:

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

function onDeviceReady(){
  alert('123');
}

<body onload="onDeviceReady()"></body>
函数init(){
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
}
函数ondevicerady(){
警报(“123”);
}

查看phonegap API,了解为什么在监听器中使用false而不是true,这与默认设置有关,但了解phonegap监听器如何工作是值得的。

在定义处理程序之前,您正在将处理程序绑定到deviceready

正确答案是:

function onDeviceReady(){
    alert('123')
}

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

显然,在此之前,您的phonegap-2.0.0.js文件(或其他版本)应该包含在该文件中。

在一个或多个平台上未触发ondeviceready事件的主要原因,是当您尝试使用错误平台的cordova/phonegap js时。

当将phonegap 3.0WP8一起使用时,设备就绪将无法工作,因为Visual Studio解决方案中不包括phonegap.js


目前的解决方案是手动将其包括在内。

将deviceready事件监听器添加到doc ready中

<script type="text/javascript" charset="utf-8">
    $(document).ready(function () {
         document.addEventListener("deviceready", onDeviceReady, true); 
    });

    function onDeviceReady() {
        alert ('123');
    }
</script>

$(文档).ready(函数(){
文件。添加的监听器(“deviceready”,onDeviceReady,true);
});
函数ondevicerady(){
警报(“123”);
}

您不想调用OnDevicerady(),因为在添加侦听器时,这将运行函数…

检查您在项目中添加的Cordova/phonegap库/jar文件的版本(在libs下)以及您在HTML文件中引用的