0

I am handling a UIWebView so that i can control which URLs should be loaded within or not, but some how even though it is retuning the NO , it still load the page. Although documentation clearly says that if you return NO, the UIWebView wont load the page.

When i debug,i can see it is returning NO but still UIWebView does load the 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;
}
4

4 回答 4

1

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

于 2012-07-04T11:49:46.647 回答
0

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

于 2012-07-03T17:04:29.597 回答
0

首先,确保您在 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 不会增加并且页面加载正常。

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

于 2012-07-03T19:39:46.027 回答
-1

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

于 2014-11-25T12:15:48.473 回答