无法在iOS模拟器上运行简单的基于KineticJs的Cordova / PhoneGap应用程序

时间:2012-08-28 16:35:30

标签: javascript ios cordova kineticjs

我一直在玩KineticJs JavaScript库,现在我正试图在iOS simualtor中模拟一些简单的基于PhoneGap的应用程序。

然而,即使在iOS模拟器中运行一段简单的代码,我也遇到了问题。我的代码只是使用KineticJs库在HTML5画布上绘制一个矩形。我可以使用Ripple Emulator(emulate.phonegap.com)在桌面浏览器中运行它并且它工作正常(尽管window.onload事件似乎被触发两次,但不确定它是否相关)。

iOS模拟器中出现问题。一旦遇到实例化新的KineticJs'阶段'的javaScript代码,Xcode控制台面板中就不会发生任何其他事情(没有显示console.log()消息)并且模拟器中没有出现alert()弹出窗口。

我已经在kinetic-v4.0.0.js源代码中为每个构造函数,方法,原型等添加了调试消息(使用console.log()和alert()语句),但没有一条消息在初始启动消息之后,它会显示在Xcode控制台面板中,因此很难确定丢失的位置。

我已在下面粘贴了我的index.html文件。它只包含用于绘制矩形的KineticJs调用,并且还包含了Cordova和KineticJS库。

我尝试了很多东西,例如重新定位包含KineticJS源代码(绝望的东西),等待用户按钮点击创建KineticJS阶段而不是在'deviceready'事件上执行它(只是为了双重确定一切都准备好了,但没有任何区别。

这是我在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>

从上面的代码中可以看出,“在onDeviceReady()中。”应该在创建KineticJS阶段之前打印到Xcode控制台面板,然后“onDeviceReady():创建阶段”。应该在舞台创作后立即打印。但是,只有“在onDeviceReady()。”打印出来。

这些是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().

任何指针都会非常感激。

1 个答案:

答案 0 :(得分:1)

确实我是傻瓜。

问题是在index.html文件中,我从Xcode项目区域外部引入kinetic-v4.0.0.js文件,将其驻留在www目录或子目录中。 / p>

当然,Xcode对此事的无线电沉默没有帮助。