ios – 在webViewDidStartLoad之后,UIWebView陷入困境

我们的iOS应用程序有一个Web视图,它从文件:URL中呈现页面.当用户触摸< A>时切换页面的元素,大约20%的时间,它被卡住如下:

>用户点击< A>链接
>我们得到WebView.shouldStartLoadWithRequest回调
>我们得到WebView.webViewDidStartLoad回调
>此后没有任何反应

屏幕仍然显示原始页面及其上的链接.我们可以通过两种方式打破僵局:

>旋转设备
>点按屏幕

此时,页面将立即完成加载.

我们用这里的食谱:

Javascript console.log() in an iOS UIWebView

让我们对页面加载有所了解.我们将javascript端的东西放在我们加载到页面上的第一个脚本文件中,并且在我们执行rotate-or-tap变通方法之前它不会打印它的消息.

所以它似乎在开始加载页面和开始评估页面上的东西之间的某个地方卡住了.

我们已经尝试了一些解决方法,但没有一个帮助:

>设置location.href而不是使用标签
>从javascript超时设置location.href
>在didStartLoad回调中,创建了一个在webView上反复调用setNeedDisplay的线程

知道我们可能做错了什么吗?

最佳答案 您可以在XCode中使用gdb来调试问题.我认为可以有断点的消息的canidates是:

- (void)webViewDidStartLoad:(UIWebView *)webView
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

我还会在UIViewController显示你的UIWebView时添加一个中断:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

然后你可以逐步完成并希望你的UIWebView子类有什么问题.

如果您不想添加断点,只需在XCode调试器中运行您的应用程序,并在加载时应用程序无响应时点击控制台窗口上方的“暂停执行”按钮.

没有任何代码可以很难知道发生了什么,但我敢打赌Xcode可以帮助你快速找到问题.

祝好运!

点赞