iphone - UIWebView:加载某些 URL 时未调用 webViewDidStartLoad/webViewDidFinishLoad 委托(delegate)方法

标签 iphone uiwebview uiwebviewdelegate

我有使用 UIWebView 实现的基本 Web 浏览器。我注意到,对于某些页面,没有调用任何 UIWebViewDelegate 方法。

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

  1. 将上述 YouTube URL 加载到 UIWebView 中 [请注意,页面加载时确实会调用 UIWebViewDelegate 方法]
  2. 触摸页面上的“上传”类别
  3. 触摸该类别中的任何视频 [问题:注意到加载了一个新页面,但没有调用任何 UIWebView 委托(delegate)]

我知道这不是 UIWebView 的委托(delegate)未正确设置的问题,因为加载其他链接时确实会调用委托(delegate)方法(例如,如果您尝试单击需要如果您在 YouTube 之外,您会注意到委托(delegate)方法被调用)。

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

我还注意到 Three20 的 TTWebController 与我遇到的问题完全相同。

但此问题产生的问题是,如果不调用委托(delegate)方法,我将无法更新 UI 以在加载新请求时启用/禁用后退和前进浏览按钮。

知道为什么会发生这种情况,或者如何解决它以在发出新请求时更新 UI?

最佳答案

这不是 iOS 错误 - 页面实际上并未重新加载。 UIWebView 委托(delegate)会在新页面请求后触发,但该页面不会执行此操作。

仔细观察当您单击该页面上的视频链接(如您所描述)时,桌面版 Safari 中会发生什么情况。请务必注意地址栏。地址将会改变,但重要的是页面不会重新加载

这一切都是由 JavaScript 处理的,而不是通过重新加载页面来处理。简而言之,页面永远不会重新加载,因此没有理由调用 UIWebView 委托(delegate)

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

关于iphone - UIWebView:加载某些 URL 时未调用 webViewDidStartLoad/webViewDidFinishLoad 委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4343654/

相关文章:

iphone - 移动文档文件夹的路径?

ios - 带有滤色器的 UIWebView

ios - 如何在 Swift 中实现 WebViewJavascriptBridge?

objective-c - Javascript 到 Obj-c 请求.. 将值返回给 Javascript

iPhone:如何在sqlite数据库中存储撇号(')符号

ios - react native : Default iOS device inside simulator

ios - 如何使用WKWebview和UIWebview实现页面配音

javascript - 避免 UIWebView 加载 iTunes App

javascript - iOS - UIWebViewDelegate 拦截 javascript 调用

iphone - iPhone 的 C++ 开发