UIWebView 即使返回 NO,仍会加载 URL



我正在处理一个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;
}

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

返回 YES 部分之前设置断点或 NSLog。也许您的方法出于某种原因被调用两次,并且它在一个上返回 NO,在另一个上返回 YES。

首先,确保在 viewDidLoad 中设置委托

webView.delegate = self;

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

确保在你的类中实现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 不会增加,页面加载正常。

这就是我能想到的所提供的数据。 :)

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

最新更新