UIWebView:加载某些URL时未调用的webViewDidStartLoad/webViewDidFinishLoad委托方法

Dia*_*rat 17 iphone uiwebview uiwebviewdelegate

我有使用a实现的基本Web浏览器UIWebView.我注意到对于某些页面,没有一个UIWebViewDelegate方法被调用.

发生这种情况的示例页面是:http://www.youtube.com/user/google.以下是重现问题的步骤(确保NSLog在控制器的UIWebViewDelegate方法中插入调用):

  1. 将上面的youtube URL加载到UIWebView [注意这里,UIWebViewDelegate在页面加载时调用方法]
  2. 触摸页面上的"上传"类别
  3. 触摸该类别中的任何视频[ 问题:请注意已加载新页面,但未调用任何UIWebView代理]

我知道这不是UIWebView代理没有正确设置的问题,因为委托方法在加载其他链接时会被调用(例如,如果你尝试点击链接将你带到youtube之外,你会注意到代表被调用的方法).

我最初的直觉是它可能是因为页面是使用AJAX加载的,这可能不会调用委托方法.但是当我检查iPhone的Safari时,它没有出现这个问题,所以它一定是我身边的东西.

我也注意到Three20的TTWebController问题与我的问题完全相同.

但是这个问题引起的问题是,如果没有调用委托方法,我将无法更新UI以在加载新请求时启用/禁用后退和前进浏览按钮.

并且想出为什么会发生这种情况或者如何在新请求发生时更新UI?

lxt*_*lxt 20

这不是iOS错误 - 页面实际上并没有重新加载.在新页面请求之后触发UIWebView委托,但该页面不会这样做.

当您按照描述单击该页面上的视频链接时,请仔细查看桌面Safari中发生的情况.请务必注意地址栏.地址会改变,但关键的是页面不会重新加载.

这全部由JavaScript处理,而不是通过重新加载页面.简单地说,页面永远不会重新加载,因此没有理由调用UIWebView委托.

如果您不相信我,请最终证明这一点,尝试重复您禁用JavaScript时描述的步骤.您会注意到页面的行为完全不同.