我正在处理一个UIWebView
,以便我可以控制应该加载哪些URL,但是有些如何重新调整NO,它仍会加载页面。虽然文档明确说明如果您返回NO,UIWebView
将不会加载页面。
当我调试时,我可以看到它正在返回NO
但仍然UIWebView
会加载该网址。
- (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 :(得分:1)
我解决了这个问题,在这里记录,这样可以帮助其他人。实际上,HTML,我们正在使用一些导致此问题的JavaScript加载。我发现只是使用几个简单的HTML并测试它们。有一次,我们知道HTML是问题,我们现在修复了html及其工作。
答案 1 :(得分:0)
在返回YES部分之前设置断点或NSLog。也许你的方法因为某种原因被调用了两次,它在一个上面返回NO,在另一个上面返回YES。
答案 2 :(得分:0)
首先,确保使用
在viewDidLoad中设置委托webView.delegate = self;
(注意不要设置2次,在xib文件和viewDidLoad中,它之前给我带来了问题)
确保在类中实现UIWebViewDelegate,如下所示:
@interface RootViewController : UIViewController<UIwebViewDelegate>
假设你已经完成了所有这些并仍然面临问题。此外,因为您已调试并且确定委托方法返回NO。我可以想到为什么会发生这种情况的一个原因是你没有加载新页面而是使用类似AJAX的东西。
我在两种页面上测试了以下代码:
- (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 :每个网址都会加载新网页的网页。上面的代码适用于这种情况,根据需要,我无法在第一次加载后加载任何页面。
案例2 :第一次加载是一个完整的新网页的网页。但其他一切都加载了AJAX,在这种情况下,我的loadCount不会增加,并且页面加载正常。
这就是我所能提供的所有数据。 :)
答案 3 :(得分:-1)
这里同样的问题,只是为了扩展上面的答案,当使用rails 4作为后端时要小心,因为turbolinks将javascript添加到每个链接然后你可能会在你的委托上得到错误的行为,碰巧我在shouldStartLoadWithRequest上返回NO并仍然看到在我的服务器上请求。