deviceReady无法在PhoneGap应用程序中运行,如何操作?

Pat*_*cow 18 javascript jquery android cordova

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

<!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>
Run Code Online (Sandbox Code Playgroud)

这里发生的是警报alert ('123');永远不会被解雇.但是,如果我取出其他JavaScript代码并仅保留警报就会被解雇.

如果我使用$(document).ready(function () { alert ('123'); }我得到警报.

这里发生了什么,为什么deviceready不被解雇?

有任何想法吗?

gpr*_*our 17

试试这种方式:

 document.addEventListener("deviceready", function(){
      alert("123");
 },true);
Run Code Online (Sandbox Code Playgroud)

  • 没有办法`document.addEventListener("deviceready",onDeviceReady(),true);`可以工作,因为你传递了`onDeviceReady`的返回值,这是未定义但addEventListener需要一个函数. (14认同)
  • @Patrioticcow尝试编写你的行`document.addEventListener("deviceready",onDeviceReady,true); `低于函数定义而不是高于它. (5认同)

God*_*a74 16

@GPRathour提供的功能是因为document.addEventListener()正在侦听deviceready,如果是,则运行警报功能.由于两个原因,我没有按你的方式工作:

1)当DOM加载并下载到你的body标签时,它调用OnDeviceReady()并且监听器从未接到调用,因此phonegap不知道它已准备好运行.

2)你必须在函数内调用你的监听器并使用'false':

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

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

<body onload="onDeviceReady()"></body>
Run Code Online (Sandbox Code Playgroud)

查看phonegap API,了解为什么在监听器中使用false而不是true,与默认设置有关,但值得阅读以了解phonegap监听器的工作原理.


Jos*_*ita 10

如果您遇到与我相同的问题,我不知道是否需要在index.html中包含cordova.js脚本,您不必提供文件或引用,只需包含以下行:

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>  
Run Code Online (Sandbox Code Playgroud)

然后Cordova将在编译时使用该库,之后将调度该事件.


kat*_*hir 6

这段代码对我有用

<body onload="init()"></body>

function init() {
    document.addEventListener("deviceready", onDeviceReady, false);
}
function onDeviceReady() {
    // Now safe to use the Cordova API
}
Run Code Online (Sandbox Code Playgroud)

快乐的编码.......


Mic*_*ael 5

当使用带有WP8的PhoneGap 3.0时,Device Ready将无法正常工作,因为Visual Studio解决方案中不包含Phonegap.js.

解决方案是暂时手动包含它.