【发布时间】:2011-12-21 10:03:06
【问题描述】:
我们的 iOS 应用有一个 Web 视图,它从文件:URL 呈现页面。当用户触摸<A>元素切换页面时,大约有20%的时间会卡住,如下所示:
- 用户点击
<A>链接 - 我们得到 WebView.shouldStartLoadWithRequest 回调
- 我们得到 WebView.webViewDidStartLoad 回调
- 此后没有任何反应
屏幕仍然显示带有链接的原始页面。我们可以通过两种方式打破僵局:
- 旋转设备
- 点击屏幕
此时,页面将立即完成加载。
我们使用了这里的食谱:
Javascript console.log() in an iOS UIWebView
让我们对页面加载有一些了解。我们将 javascript 端的内容直接放在页面上加载的第一个脚本文件中,并且在我们执行旋转或点击解决方法之前它不会打印其消息。
所以它似乎在开始加载页面和开始评估页面上的内容之间卡住了。
我们尝试了许多解决方法,但都没有帮助:
- 设置 location.href 而不是使用标签
- 从 javascript 超时设置 location.href
- 在 didStartLoad 回调中,创建了一个线程,一遍又一遍地在 webView 上调用 setNeedDisplay
知道我们可能做错了什么吗?
【问题讨论】:
-
您能否注释掉页面上的所有内容或大部分内容,但仍然会出现问题?那将是我的第一种诊断方法。也许这是页面大小/内存问题。如果出现应用程序内存错误,您是否 NSLog'ging?
-
我的应用程序中出现了同样的奇怪行为。你找到解决办法了吗?
-
还没有答案,尽管我很高兴我们并不孤单。我已经看到了完全微不足道的页面的问题,正如我所说,我们已经尝试在我们要访问的页面的开头添加日志记录,但没有发生。所以 webkit 已经离开旧页面并开始加载新页面,但在解析任何内容之前就停止了。