2012-07-03 30 views
0

我正在处理UIWebView,这样我就可以控制哪些URL应该加载或不加载,但是即使重新调用NO,它仍然会加载页面。虽然文档明确指出如果您返回NO,UIWebView将不会加载页面。UIWebView尽管返回NO仍然加载URL

当我调试时,我可以看到它正在返回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; 
} 

回答

0

在返回YES部分之前设置断点或NSLog。也许你的方法因为任何原因被调用两次,并且它返回NO,另一个返回YES。

+0

我做了那就是为什么我在原始问题中说我发现它返回NO,它没有被调用两次。 – Gripsoft

0

首先,请确保您设置在viewDidLoad中的委托与

webView.delegate = self; 

(照顾不设置它的2倍,在厦门国际银行文件,并在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不会增加,页面加载正常。

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

1

我解决了这个问题,在这里记录,所以它可能会帮助别人。其实,HTML,我们正在加载使用一些JavaScript导致这个问题。我通过使用几个简单的html并与他们一起测试发现。有一次,我们知道HTML是问题,我们现在修复了HTML及其工作。

-1

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

相关问题