1

私はKineticJsJavaScriptライブラリで遊んでいましたが、今はiOSsimualtorでいくつかの単純なPhoneGapベースのアプリをシミュレートしようとしています。

ただし、iOSシミュレーターで単純なコードを機能させるのに問題があります。私のコードは、KineticJsライブラリを使用してHTML5キャンバスに長方形を描画するだけです。Ripple Emulator(emulate.phonegap.com)を使用してデスクトップブラウザーで実行でき、正常に動作します(ただし、window.onloadイベントは2回トリガーされるようですが、それが適切かどうかはわかりません)。

この問題はiOSシミュレータで発生します。新しいKineticJsの「ステージ」をインスタンス化するjavaScriptコードが検出されるとすぐに、Xcodeコンソールパネルで他に何も起こらず(console.log()メッセージは表示されません)、シミュレーターにalert()ポップアップは表示されません。

Kinetic-v4.0.0.jsソースコードのすべてのコンストラクター、メソッド、プロトタイプなどにデバッグメッセージ(console.log()およびalert()ステートメントを使用)を追加しましたが、1つのメッセージが表示されません最初の起動メッセージの後のXcodeコンソールパネル。そのため、どこで失われているのかを把握するのは困難です。

以下にindex.htmlファイルを貼り付けました。長方形を描画するためのKineticJs呼び出しが含まれているだけでなく、CordovaおよびKineticJSライブラリも含まれています。

私は、KineticJSソースコード(必死のもの)のインクルードを再配置する、「deviceready」イベントで行うのではなく、ユーザーボタンをクリックしてKineticJSステージを作成するのを待つなど、多くのことを試しました(念のために言っておきますが)すべての準備ができています)が、何も違いはありませんでした。

これは、kinetic-v4.0.0.jsでの私のデバッグステートメントの例です(私が愚かなことをしている場合に備えて):

Kinetic.Stage = Kinetic.Container.extend({
    init: function(config) {
        console.log("In Kinetic.Stage.init().");            //<<<<<< Debug
        if (myDbg) alert("In Kinetic.Stage.init().");       //<<<<<< Debug
        .
        .
        .
        .

私のindex.htmlコード:

<!DOCTYPE html>
<html>
    <head>
        <title>Basic Rect</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <meta name = "format-detection" content = "telephone=no"/>
        <meta name="viewport" content="user-scalable=no, initial-scale=0.75, maximum-scale=1, minimum-scale=1, width=device-width;" />
        <script src="../../js/kinetic-v4.0.0.js"></script>
        <script type="text/javascript" src="cordova-2.0.0.js"></script>
        <link rel="stylesheet" type="text/css" href="css/index.css" />
        <script>
            document.addEventListener("deviceready", onDeviceReady, false);

            function onDeviceReady() {
                console.log("In onDeviceReady().");
                //alert("In onDeviceReady().");

                var stage = new Kinetic.Stage({
                    container: "container",
                    width: 578,
                    height: 200
                });

                console.log("onDeviceReady(): created stage.");
                //alert("onDeviceReady(): created stage.");

                var layer = new Kinetic.Layer();

                var rect = new Kinetic.Rect({
                    x: 239,
                    y: 75,
                    width: 100,
                    height: 50,
                    fill: "#00D2FF",
                    stroke: "black",
                    strokeWidth: 4
                });

                layer.add(rect);
                stage.add(layer);

                console.log("Finishing onDeviceReady().");
                //alert("Finishing onDeviceReady().");

            }; // onDeviceReady() function handler
        </script>
    </head>

    <body>
        <div id="container">
        </div>
    </body>

</html>

上記のコードからわかるように、「InonDeviceReady()」。KineticJSステージが作成される直前にXcodeコンソールパネルに出力してから、「onDeviceReady():createdstage」を出力する必要があります。ステージ作成直後に印刷する必要があります。ただし、「InonDeviceReady()」のみ。印刷されます。

Xcodeコンソールパネルのメッセージは次のとおりです。

2012-08-28 16:58:05.384 misc35_basic_kinetic_rect_phonegap_prj[92196:13403] Multi-tasking -> Device: YES, App: YES
2012-08-28 16:58:05.577 misc35_basic_kinetic_rect_phonegap_prj[92196:13403] PluginResult:toJSONString - {"status":1,"message":"wifi","keepCallback":false}
2012-08-28 16:58:05.578 misc35_basic_kinetic_rect_phonegap_prj[92196:13403] PluginResult toSuccessCallbackString: cordova.callbackSuccess('NetworkStatus0',{"status":1,"message":"wifi","keepCallback":false});
2012-08-28 16:58:05.579 misc35_basic_kinetic_rect_phonegap_prj[92196:13403] PluginResult:toJSONString - {"status":1,"message":{"name":"iPhone Simulator","uuid":"0000-0000-0000-0000-0000","platform":"iPhone Simulator","version":"5.1","cordova":"2.0.0"},"keepCallback":false}
2012-08-28 16:58:05.580 misc35_basic_kinetic_rect_phonegap_prj[92196:13403] PluginResult toSuccessCallbackString: cordova.callbackSuccess('Device1',{"status":1,"message":{"name":"iPhone Simulator","uuid":"5EFBB116-CF1E-4E47-9259-6092C5F7C4F6","platform":"iPhone Simulator","version":"5.1","cordova":"2.0.0"},"keepCallback":false});
2012-08-28 16:58:05.584 misc35_basic_kinetic_rect_phonegap_prj[92196:13403] [INFO] In onDeviceReady().

任意のポインタをいただければ幸いです。

4

1 に答える 1

1

確かに私は愚かでした。

問題は、index.html ファイルで、Xcode プロジェクト領域の外から kinetic-v4.0.0.js ファイルを取り込んでいて、www ディレクトリまたはサブディレクトリに配置していたことです。

もちろん、この問題に関する Xcode の無線沈黙は役に立ちませんでした。

于 2012-08-29T08:03:22.787 に答える