我正在使用Javascript for iPad进行多人游戏.我在多人游戏中使用Smartfox Server,在触摸事件中使用Hammer.js.
我有一个问题,当我在游戏的某个特定部分使用Hammer事件时,它会崩溃Mobile Safari.它在PC上完全正常,但在iPad上它会导致崩溃.
这是我的代码的一部分:
this.startButton.hammer().on("tap", this.handleStartClicked);
Run Code Online (Sandbox Code Playgroud)
我在"handleStartClicked"函数中所做的就是从输入框中获取用户的名称和密码,将它们保存到本地存储(如果可用),并调用Smartfox"connect"函数,该函数将用户连接到Smartfox并开始登录处理.这是功能:
onStartClicked:function(e){
if(this.nameInput.val() == "" || this.pwInput.val() == "") {return;}
this.startButton.unbind("click", this.onStartClickBind);
if(window.localStorage != null && window['localStorage'] != null){
window.localStorage.username = this.nameInput.val();
window.localStorage.password = this.pwInput.val();
}
this.sfs.connect();
Run Code Online (Sandbox Code Playgroud)
}
如果我单击开始按钮,Mobile Safari会在大约80%的时间内崩溃.即使它没有立即在该点击上崩溃,它通常会在游戏后期的某个时刻崩溃.但是,如果我从不单击开始按钮(例如,如果我只是在没有触摸交互的情况下自动启动用户),则崩溃永远不会发生 - 即使在游戏的后期点也不会发生.我甚至试图完全删除开始按钮,只是将触摸监听器添加到整个文档正文,它仍然崩溃,所以它似乎与按钮没有任何关系(它只是一个普通的HTML按钮包裹在一个jQuery对象).
奇怪的是,如果我将Hammer.js事件更改为常规jQuery事件:
this.startButton.bind("click", this.onStartClickBind);
Run Code Online (Sandbox Code Playgroud)
移动Safari永远不会崩溃.不是在开始点击...不是在游戏中的任何一点.它似乎解决了一切.另一个奇怪的事情是我在我的代码的其余部分使用Hammer事件,但它似乎是一个问题的唯一地方就是这个处理程序.我不知道游戏中这个处理程序与其他处理程序有什么不同,除非崩溃与Mobile Safari,Hammer.js和Smartfox之间的交互有所不同.我在游戏中的其他Hammer处理程序上发送了对Smartfox的调用,但它们并没有让Safari崩溃,所以这似乎不太可能.
此外,我在下面有iPad的崩溃日志,如果这个问题在这个问题上有所了解:
Incident Identifier: 540C3060-271F-468E-9DF8-DA641DACA406
CrashReporter Key: a5c833f7168137e99d3c8aa6a4d35804a584b7b4
Hardware Model: iPad3,1
Process: Web [210]
Path: /var/mobile/Applications/327316BD-8A50-4245-B728-
E6504C19A76D/Web.app/Web
Identifier: com.apple.webapp
Version: 1.0 (1.0)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2014-01-13 14:01:50.112 -0800
OS …
Run Code Online (Sandbox Code Playgroud)