0

初めての phonegap チュートリアルを進めていますが、問題が発生しています。

  1. 「deviceready」イベントが発生したときに onDeviceReady() 関数が呼び出されるように設定しましたが、メソッドは呼び出されません。

  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>

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 リスナーを追加します。

  • まだ運がない!

4

4 に答える 4

0

タグを次のものに置き換えます。

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

application/javascript MIME タイプを使用することは、標準的なアプローチではありません。

コードに構文エラーがないか確認してください (コンソールを開いて Safari や Chrome などで実行して確認してください)。PhoneGap でうまくいかない場合は、通常、JS エラーがどこかに忍び込んでいることが原因であることがわかりました。

テストしようとしているもの (deviceready イベントを設定する行とそれが実行する関数) を除くすべてのスクリプトを削除し、コードとスクリプトの各ブロックを 1 つずつ導入して、いつ停止するかを確認します。そうすれば、問題の原因となっているコード ブロックを分離できます。

于 2013-05-30T22:22:28.237 に答える
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 要素にスクリプトを配置すると非同期で読み込まれる可能性があるため、スクリプトを head または のすぐ上に移動して、</html>Henry などのより標準的な script 要素に変更してみてください。提案します。

<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 に答える