Tob*_*son 7 javascript iphone ajax jquery uiwebview
我正在构建一个iPhone应用程序,显示指向我创建的Web应用程序的UIWebView.
Web应用程序对数据项进行频繁的Web服务调用,这些数据项用于在画布上设置控件动画.对数据的调用使用jQuery ajax,通过JSON传递参数并接收XML响应.
我发现当用户与UIWebView的交互正在发生时,javascript setTimeout方法被阻止,似乎根本不执行.很公平; 有办法解决这个问题.
但主要的问题是,在用户交互(缩放,平移等)之后,ajax web服务调用将一直失败,我无法确定原因.即使它们是反复制作的,在接下来的几分钟内,它们都不会进入网络服务.如果您完全离开UIWebView,只要Web服务启动并且存在连接,它们就永远不会失败.
任何人都可以建议为什么,以及如何解决/解决这个问题?
快速更新:根据Safari移动调试器,错误功能中的"响应"对象未定义.(例如,如果我将URL设置为无效,则可以使用.然后可以通过[webView stringByEvaluatingJavascript:@"lastError"]从objective-c调用它,但是为此"触及uiwebview"错误抛出异常):
$.ajax({
type: "POST",
url: "WebService.asmx/GetValues",
async: true,
data: "{'pageVersionIndex': " + PageVersionIndex + " , 'timeStreamIndex': '" + TimeStream + "'}",
contentType: "application/json; charset=utf-8",
dataType: "xml",
success: function (response) { UpdateControls(response); },
error: function (response, status, errorthrown) {
calling = false;
lastError = response.statusText; //Throws exception
connectionInterrupted = true;
DataRoutine = window.setTimeout(DataService, dataFrequency); }
});
Run Code Online (Sandbox Code Playgroud)
恐怕你在某种程度上……被敬酒了。在 iOS Safari 和 UIWebView 中,系统进程的优先级高于浏览器,如果本机进程突然需要更多 CPU 功率或内存(例如处理触摸等),则可能会停止任何正在运行的 javascript 执行,以减少内存负载或 CPU 使用情况。最糟糕的是它不会抛出任何错误或任何东西......它只是停止你的代码执行,就好像什么都没发生一样。
担心如果这种情况在您的应用程序中经常发生,唯一的方法是添加某种计时器,如果请求没有被阻止,该计时器将进行侦听(如果是这样),请再次执行此操作,直到成功为止。
iOS 的起伏 - 他们真的喜欢你使用原生而不是 Web :)
希望有帮助,汤姆
归档时间: |
|
查看次数: |
1618 次 |
最近记录: |