Alb*_*haw 3 loading uiwebview uiactivityindicatorview ios
这是一篇问答帖子.为了通知我在浏览StackOverflow数据库时遇到过这个问题的许多其他用户.这些用户都没有得到一个可靠的答案(他们中的大多数人在几年前提出这个问题,所以我不打算发帖).
许多人都在努力解决的问题如下:
当您尝试在UIWebView中加载页面然后页面然后通过iFrame加载另一个页面或者通过javascript加载广告时,您最终会再次调用页面加载函数,如果您使用的是UIActivityIndicator,它将再次被调用同时也惹恼了你的用户.
对此的修复是存储先前的MainURL并检查尝试加载的新MainURL,如果它们匹配,则忽略加载函数.(我在下面的回答中的示例代码)
**webViewDidStartLoad在网页已经真正加载后将会额外调用该方法的网页示例如下:www.speakeasy.net/speedtest/
//Define the NSStrings "lastURL" & "currentURL" in the .h file.
//Define the int "falsepositive" in the .h file. (You could use booleans if you want)
//Define your UIWebView's delegate (either in the xib file or in your code `<UIWebViewDelegate>` in .h and `webView.delegate = self;` in .m viewDidLoad)
- (void)webViewDidFinishLoad:(UIWebView *)webView {
lastURL = [NSString stringWithFormat:@"%@", webView.request.mainDocumentURL];
if (falsepositive != 1) {
NSLog(@"Loaded");
//hide UIActivityIndicator
} else {
NSLog(@"Extra content junk (i.e. advertisements) that the page loaded with javascript has finished loading");
//This method may be a good way to prevent ads from loading hehe, but we won't do that
}
}
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; {
NSURL *requestURL = [request mainDocumentURL];
currentURL = [NSString stringWithFormat:@"%@", requestURL]; //not sure if "%@" should be used for an NSURL but it worked..., could cast `(NSString *)` if we *really* wanted to...
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView {
if ([currentURL isEqualToString:lastURL]) {
falsepositive = 1;
NSLog(@"The page is loading extra content with javascript or something, ignore this");
} else {
falsepositive = 0;
NSLog(@"Loading");
//show UIActiviyIndicator
}
}
//make sure you read the //comments// at the top of this code snippet so that you properly define your .h variables O:) Thanks!
//
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
896 次 |
| 最近记录: |