标签:
在做网页加载进度条的时候,发现UIWebViewDelegate中webViewDidFinishLoad方法会执行多次:
- (void)webViewDidStartLoad:(UIWebView *)webView { NSLog(@"start******"); } - (void)webViewDidFinishLoad:(UIWebView *)webView { NSLog(@"end...."); }
查阅网上资料,说网页内有异步请求或者重定向时,就会多次调用上述方法,然后证实异步请求是不是有这种情况:
例子中加载本地html文件,用js模拟异步请求:
加载本地html:
NSString * path = [[NSBundle mainBundle] pathForResource:@"demo11" ofType:@"html"]; NSString * HTMLString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; [self.webView1 loadHTMLString:HTMLString baseURL:nil];
js代码:
var xhr = new XMLHttpRequest(); xhr.open("GET","http://localhost:8080/myweb1/testserlet",true); xhr.send("name"); xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ if(xhr.status == 200){ alert("success!"); }else{ alert("failed"+xhr.status); } } }
发现webViewDidFinishLoad并没有多次执行,那么剩下的原因就是网页的重定向。
- (void)webViewDidFinishLoad:(UIWebView *)webView { if (webView.isLoading) { return; } //code... }
这样每进入一个新的网页,webViewDidFinishLoad只执行一次。
或者折中方法,让次方法只执行一次的话(不管网页的跳转):
定义一个属性:@property(nonatomic) BOOL isFirstLoadWeb;
- (void)webViewDidFinishLoad:(UIWebView *)webView { if (!self.isFirstLoadWeb) { self.isFirstLoadWeb = YES; }else return; //code... }
先这样吧,如果有理解错误的,后边再改。。。
标签:
原文地址:http://www.cnblogs.com/yingu/p/5074306.html