没有调用onDeviceReady函数

时间:2013-05-30 20:16:55

标签: android cordova

我正在通过我的第一个phonegap教程,但我遇到了问题。

  1. 我已经设置了在触发“deviceready”事件时调用onDeviceReady()函数,但是从不调用该方法。

  2. 我尝试直接调用App.start()方法,但是我在控制台中收到APP.start()方法不存在的错误。

  3. 感谢您的帮助!

    Index.html和App.js的代码如下:

    的index.html

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="format-detection" content="telephone=no" />
        <meta name="viewport"
            content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
        <script type="text/javascript" charset="utf-8"
        src="cordova/cordova-2.2.0-android.js"></script>
        <script type="text/javascript" charset="utf-8"
        src="framework/utility.js"></script>
        <script type="text/javascript" charset="utf-8"
        src="app.js"></script>
        <link rel="stylesheet" href="framework/base.css" type="text/css" />
        <link rel="stylesheet" href="style/style.css" type="text/css" />
        <title>Chapter 1 App: Quiz Time</title>
    </head>
    <body>
        <div class="container" id="rootContainer">
        </div>
        <div id="preventClicks"></div>
    </body>
    </html>
    

    app.js

    document.addEventListener("load",function(){
    
            document.addEventListener("deviceready",onDeviceReady,false);
        },false);
    
        function onDeviceReady() {
            alert("WOAH!");
            start();
        }
    
        start = function() {
            PKUTIL.include([ "framework/ui-core.js", "framework/device.js" ],
                    function() {
                        init();
                    });
        }
    
        init = function() {
            PKUI.CORE.initializeApplication();
            PKUTIL.loadHTML("views/gameView.html", {
                id : "gameView",
                className : "container",
                attachTo : $ge("rootContainer"),
                aSync : true
            }, function(success) {
                if (success) {
                    gameView.initializeView();
                }
            });
    
            PKUTIL.loadHTML("views/endView.html", {
                id : "endView",
                className : "container",
                attachTo : $ge("rootContainer"),
                aSync : true
            }, function(success) {
                if (success) {
                    endView.initializeView();
                }
            });
    
            PKUTIL.loadHTML("views/startView.html", {
                id : "startView",
                className : "container",
                attachTo : $ge("rootContainer"),
                aSync : true
            }, function(success) {
                if (success) {
                    startView.initializeView();
                    PKUI.CORE.showView(startView);
                }
            });
        }
    

    更新:

    • type="application/javascript"更改为“type =”text / javascript“'

    • 在加载侦听器中添加deviceready listener。

    • 仍然没有运气!

4 个答案:

答案 0 :(得分:0)

将您的代码替换为:

<script type="text/javascript" ...

使用application / javascript mime类型不是标准方法。

检查代码是否存在语法错误(在Safari中运行它,或者在打开控制台的情况下运行Chrome等以查看它们)。我发现当事情在PhoneGap中不起作用时,通常是因为某个地方出现了JS错误。

删除除了你要测试的东西之外的所有脚本(设置deviceready事件的行以及它运行的函数),然后逐个引入每个代码块和脚本以查看它何时停止。这样,您就可以隔离导致问题的代码块。

答案 1 :(得分:0)

我自己也经历过类似的问题。我会尽力提供任何建议。

首先,如果您查看Phonegaps Device Ready文档,则会注明Typically, you will want to attach an event listener with document.addEventListener once the HTML document's DOM has loaded.。如果你看一下源代码,其原因在于它们实际上用自己的函数覆盖document.addEventListener,该函数处理deviceready的所有绑定。

我发现自己,当我动态加载phonegap时,如果我在它挂钩之前添加我的deviceready事件监听器,它就永远不会出现,但如果我等到脚本元素被加载,它就会工作得很好。通常,如果您只是直接使用<script>标记,它们实际上是同步加载的,所以这不是问题。在body元素中使用脚本可能会导致它们以非同步方式加载,因此我可能会尝试将它们移动到头部或</html>上方,并尝试更改为更高标准脚本元素,就像亨利建议的那样。

<script type="text/javascript" src="cordova/cordova-2.2.0-android.js"></script>
<script type="text/javascript" src="framework/utility.js"></script>
<script type="text/javascript" src="app.js"></script>

答案 2 :(得分:0)

你的js应该是这样的

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

function onDeviceReady() {
    alert("WOAH!");
    start();
}

function start() {
    PKUTIL.include([ "framework/ui-core.js", "framework/device.js" ],
            function() {
                init();
            });
}

当你的js加载,并且cordova就绪时,你的函数onDeviceReady将被执行。此功能将发出警报,然后调用函数start。

答案 3 :(得分:0)

尝试更改

$$(document).on('deviceready', function() {
    // Your content here
    });

对于

  $$(document).on('DOMContentLoaded', function(){
     // Your content here
    });