0

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

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

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

谢谢你的帮助!

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

索引.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>

应用程序.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 侦听器。

  • 还是没有运气!

4

4 回答 4

0

将您的标签替换为:

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

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

检查您的代码是否存在语法错误(在 Safari 或 Chrome 等中运行它并打开控制台以查看它们)。我发现当PhoneGap 中出现问题时,通常是因为某个地方出现了JS 错误。

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

于 2013-05-30T22:22:28.237 回答
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。

于 2013-05-31T09:56:10.607 回答
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>,并尝试更改为更标准的脚本元素,例如 Henry建议。

<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>
于 2013-05-30T23:17:37.763 回答
0

尝试改变

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

为了

  $$(document).on('DOMContentLoaded', function(){
     // Your content here
    });
于 2017-11-30T21:05:20.677 回答