【问题标题】:UIWebView Still load the URL even though returning NOUIWebView 即使返回 NO 仍然加载 URL
【发布时间】:2012-07-03 16:54:25
【问题描述】:

我正在处理UIWebView,以便我可以控制应该在其中加载或不加载哪些 URL,但是即使它正在重新调整 NO,它仍然会加载页面。尽管文档清楚地表明如果您返回 NO,UIWebView 将不会加载页面。

当我调试时,我可以看到它正在返回 NO,但 UIWebView 仍然会加载 URL。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSLog(@"%@", [[request URL] absoluteString]);
    NSString *fullURL = [[request URL] absoluteString];

    NSRange range = [fullURL rangeOfString:@"#"];
    if (range.length != 0) {
        NSLog(@"We need to show the other view");

        return NO;
    }


    return YES;
}

【问题讨论】:

    标签: iphone objective-c ios uiwebview


    【解决方案1】:

    我解决了这个问题,在此记录,以便对其他人有所帮助。实际上,我们使用一些 javascript 加载的 HTML 导致了这个问题。我发现只是使用了一些普通的 html 并用它们进行了测试。曾经,我们知道 HTML 有问题,我们修复了 html 并使其现在可以正常工作。

    【讨论】:

      【解决方案2】:

      在返回 YES 部分之前设置断点或 NSLog。也许你的方法因为某种原因被调用了两次,一次返回 NO,另一次返回 YES。

      【讨论】:

      • 我做到了,这就是为什么我在原始问题中告诉我发现它返回 NO,它没有被调用两次。
      【解决方案3】:

      首先,确保您在 viewDidLoad 中使用

      设置委托
      webView.delegate = self;
      

      (注意不要设置2次,在xib文件和viewDidLoad中,之前给我带来了问题)

      确保在你的类中实现 UIWebViewDelegate,如下所示:

      @interface RootViewController : UIViewController<UIwebViewDelegate>
      

      假设您已经解决了所有这些问题,但您仍然面临问题。此外,由于您已调试并且确定委托方法返回 NO。我能想到为什么会发生这种情况的一个原因是您没有加载新页面,而是使用了 AJAX 之类的东西。

      我在 2 种页面上测试了以下代码:

      - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
      {
          NSLog(@"THE loadCount is %d", self.loadCount);
          if (self.loadCount > 1){
              return NO;
          }
          self.loadCount++;
          return YES;
      }
      

      案例 1: 每个 URL 都加载一个新页面的网页。上面的代码在这种情况下有效,在第一次加载后我无法根据需要加载任何页面。

      案例 2:第一次加载的网页是一个全新的网页。但是其他所有内容都使用 AJAX 加载,在这种情况下,我的 loadCount 不会增加并且页面加载正常。

      根据提供的数据,我能想到的就是这些了。 :)

      【讨论】:

        【解决方案4】:

        这里有同样的问题,只是为了扩展上面的答案,在使用 rails 4 作为后端时要小心,因为 turbolinks 将 javascript 添加到每个链接,然后你的委托可能会出现错误的行为,碰巧我在 shouldStartLoadWithRequest 上返回 NO 并且仍然看到在我的服务器上请求。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-07
          • 2016-01-15
          • 2019-10-04
          • 2021-06-15
          相关资源
          最近更新 更多