如何检测UIWebView何时完成加载?
我想构build一个UIWebView的filter,我很努力检测UIWebView何时完成加载。 我已经使用了以下两种方法
– webView:shouldStartLoadWithRequest:navigationType: – webViewDidFinishLoad:
但问题是这些将被调用多次,当页面有框架和额外的内容加载。
我需要的是知道什么时候视图已经完全加载,没有更多的内容来获取。 然后,当内容已经加载,我可以检查页面的URL与核准的URLS列表。
有任何想法吗?
使用UIWebViewDelegate
协议方法webViewDidFinishLoad
和webView'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:
- 用WKWebWiew取代了UIWebView。
- 处理“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); } }]; }