我正在尝试为UIWebView构建一个过滤器,我正在努力检测UIWebView何时完全加载。我使用了以下两种方法
– webView:shouldStartLoadWithRequest:navigationType:
– webViewDidFinishLoad:
但问题是,当页面包含要加载的帧和其他内容时,会多次调用这些内容。
我需要的是知道视图何时完全加载并且没有更多内容可以获取。然后,当内容加载后,我可以根据已批准的URL列表检查页面的URL。
任何想法?
答案 0 :(得分:34)
使用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");
}
答案 1 :(得分:2)
Swift 3版本:
func webViewDidFinishLoad(_ webView: UIWebView) {
if webView.isLoading{
return
}
print("Done loading")
}
答案 2 :(得分:1)
尝试使用:
- (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)
{}
希望能帮到你。
答案 3 :(得分:1)
原始问题确实是多年前发布的。最近我不得不为这个问题找到一个可靠的解决方案。
以下是适合我的解决方案:
完整的代码是:
- (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);
}
}];
}
答案 4 :(得分:0)
如果您不是UIWebView
的所有者,因此您无权访问webViewDidFinishLoad
,但是您引用了UIWebView
,则可以使用下一个代码
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { (timer) in
guard uiWebView.isLoading else {
return
}
timer.invalidate()
//Add your logic here
}