我一直在玩 KineticJs JavaScript 库,现在我正在尝试在 iOS 模拟器中模拟一些简单的基于 PhoneGap 的应用程序。
但是,我什至无法在 iOS 模拟器中运行一段简单的代码。我的代码只是使用 KineticJs 库在 HTML5 画布上绘制了一个矩形。我可以使用 Ripple Emulator (emulate.phonegap.com) 在桌面浏览器中运行它,它工作正常(尽管 window.onload 事件似乎被触发了两次,但不确定这是否相关)。
问题出现在 iOS 模拟器中。一旦遇到用于实例化新 KineticJs 'stage' 的 javaScript 代码,Xcode 控制台面板中不会发生任何其他事情(没有显示 console.log() 消息)并且模拟器中不会出现 alert() 弹出窗口。
我在 kinetic-v4.0.0.js 源代码中为每个构造函数、方法、原型等添加了调试消息(使用 console.log() 和 alert() 语句),但没有一条消息显示在初始启动消息之后的 Xcode 控制台面板,因此很难弄清楚它在哪里丢失了。
我在下面粘贴了我的 index.html 文件。它仅包含用于绘制矩形的 KineticJs 调用,还包含 .
我尝试了很多事情,例如重新定位 KineticJS 源代码的包含(绝望的东西),等待用户按钮单击以创建 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>
从上面的代码可以看出,“在 onDeviceReady() 中”。应该在创建 KineticJS 阶段之前打印到 Xcode 控制台面板,然后是“onDeviceReady(): created stage”。应在舞台创建后立即打印。但是,只有“在 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().
任何指针将不胜感激。