Iphone 检查是否加载了UIWebView

Iphone 检查是否加载了UIWebView,iphone,uiwebview,Iphone,Uiwebview,我在一个选项卡中有一个UIWebView,该选项卡在viewDidLoad中加载,但如果用户点击其他选项卡,加载将中断并停止 -(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error将被调用,但我想知道,如果用户再次点击上一个选项卡,如何检查webView是否已加载,如果未加载,它将重新加载,类似这样的事情 -(void)viewWillAppear:(BOOL)animated { if (!we

我在一个选项卡中有一个UIWebView,该选项卡在viewDidLoad中加载,但如果用户点击其他选项卡,加载将中断并停止
-(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error将被调用,但我想知道,如果用户再次点击上一个选项卡,如何检查webView是否已加载,如果未加载,它将重新加载,类似这样的事情

  -(void)viewWillAppear:(BOOL)animated
{
    if (!webView)
        {
          NSURL *url = [NSURL URLWithString:@"url"];
          NSURLRequest *request = [NSURLRequest requestWithURL:url];
          [webView loadRequest:request];
        }

    }

但它不工作,请帮助?

UIWebview有一个webViewDidFinishLoad委托方法。设置一个布尔值以指示此操作已完成

- (void)webViewDidStartLoad:(UIWebView *)webView {

 webViewDidFinishLoadBool = NO;
 loadFailedBool = NO;

}


- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

 loadFailedBool = YES;
}


- (void)webViewDidFinishLoad:(UIWebView *)webView {

   if (!loadFailedBool)
   webViewDidFinishLoadBool = YES;

}

如果您还没有让它工作,下面是一个工作示例。加载失败时,它还会显示警报,并且警报仅显示一次

标题:

@interface MyViewController : UIViewController <UIWebViewDelegate> {
    BOOL wasLoaded;
    BOOL alertWasShown;
}

@property (nonatomic, retain) IBOutlet UIWebView *myWebView;

@end

我希望这会有所帮助。

对于具有多个框架的页面,还应使用UIWebView.loading属性

苹果的文档:@property(非原子,只读,getter=isload)BOOL-load 一个布尔值,指示接收器是否已完成加载内容

如果是,则接收器仍在加载内容;否则,不会


在iOS6(beta 4)中,苹果似乎也修复了该属性的一些问题

原来的问题确实是多年前发布的。 最近,我不得不为这个问题找到一个可靠的解决方案

以下是对我有效的解决方案:

  • 将UIWebView替换为WKWebWiew
  • 在处理“didFinishNavigation”委托方法时添加了“evaluateJavaScript”代码
  • 完整的代码是:

       - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
        [webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id result, NSError *error) {
            if (result != nil) {
                // Call your method here
            }
            if(error) {
                NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
            }
        }];
    }
    

    哪个部分不工作?是否调用委托方法?是的,但问题是webviewdidfinishload在加载失败后被调用,因此bool将始终为YESHmmm。。那么试试我对上述代码所做的更新。它设置了另一个bool来表示失败。唯一可行的解决方案(我发现)是:
       - (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
        [webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id result, NSError *error) {
            if (result != nil) {
                // Call your method here
            }
            if(error) {
                NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
            }
        }];
    }