如何检测UIWebView何时完成加载?

我想构build一个UIWebView的filter,我很努力检测UIWebView何时完成加载。 我已经使用了以下两种方法

– webView:shouldStartLoadWithRequest:navigationType: – webViewDidFinishLoad: 

但问题是这些将被调用多次,当页面有框架和额外的内容加载。

我需要的是知道什么时候视图已经完全加载,没有更多的内容来获取。 然后,当内容已经加载,我可以检查页面的URL与核准的URLS列表。

有任何想法吗?

使用UIWebViewDelegate协议方法webViewDidFinishLoadwebView's isLoading property

  - (void)webViewDidFinishLoad:(UIWebView *)webView { //Check here if still webview is loding the content if (webView.isLoading) return; //after code when webview finishes NSLog(@"Webview loding finished"); } 

Swift 3版本:

 func webViewDidFinishLoad(_ webView: UIWebView) { if webView.isLoading{ return } print("Done loading") } 

尝试使用:

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)requestURL navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = [requestURL URL]; NSLog(@"##### url = %@",[url absoluteString]); return YES; } 

不要忘记设置你的UIWebView委托

或添加声明,

 NSRange range = [[url absoluteString] rangeOfString:@"https://www.google.com"]; if (range.location != NSNotFound) {} 

希望能帮到你。

原来的问题确实是在多年前发布的。 最近我不得不为这个问题find一个可靠的解决scheme。

这是为我工作的解决scheme:

  1. 用WKWebWiew取代了UIWebView。
  2. 处理“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); } }]; }